Python中的字符串切片

2 投票
3 回答
999 浏览
提问于 2025-04-16 21:05

我想从字符串的末尾切割出单词。假设我有一些包含大小写字母的行(大写/小写)。

Abc Defg Hijk Lmn
Xyz Lmn jkf gkjhg

我想把它们切割成下面这样的:

Abc Defg Hijk
Abc Defg
Abc 

然后我需要把每一行切割出来的部分放到变量里,这样我就可以用它们去搜索某个文本文件,并返回整个文本:

假设我有这样的文本:

 Akggf Abc Defg Hijk fgff jfkjgk djkfkgf     
 Akgff Abc fgff jfkjgk djkfkgf     
 Akggef Abc Defg  fgff jfkjgk djkfkgf
 gjshgs gskk Xyz Lmn jkf
 fgsgdf fkgksk Xyz Lmn

有什么建议吗?谢谢!

3 个回答

0

要从字符串创建一个列表:

a="Abc Defg Hijk Lmn".split()

看看这个:

['Abc', 'Defg', 'Hijk', 'Lmn']

切片,去掉最后一个条目:

a[:-1]

这样得到:

['Abc', 'Defg', 'Hijk']

要把它再合并成一个字符串:

" ".join(a[:-1])

得到:

'Abc Defg Hijk'

现在,在一个循环中重复这个操作……

5

使用 rsplit 函数:

>>> s = 'Abc Defg Hijk Lmn'
>>> s.rsplit(' ', 1)[0]
'Abc Defg Hijk'
>>> s = s.rsplit(' ', 1)[0]
>>> s.rsplit(' ', 1)[0]
'Abc Defg'

还有其他变种:

>>> words = s.split()
>>> [' '.join(words[:i]) for i in range(len(words), 0, -1)]
['Abc Defg Hijk Lmn', 'Abc Defg Hijk', 'Abc Defg', 'Abc']
1

你也可以使用下面的代码:

dataStr = 'Abc Defg Hijk Lmn'
for word in reversed(dataStr.split()):
    # do something with word

或者:

dataStr = 'Abc Defg Hijk Lmn'
removeLastWord = lambda line: ' '.join([word for word in line.split()[:-1]])
dataStr = removeLastWord(dataStr)
>>> 'Abc Defg Hijk'
dataStr = removeLastWord(dataStr)
>>> 'Abc Defg'
dataStr = removeLastWord(dataStr)
>>> 'Abc'

我看了你的更新,觉得Roman的解决方案符合你的需求。你可以这样更新你的代码:

searchTxt = """Abc Defg Hijk Lmn
Xyz Lmn jkf gkjhg"""

data = """kggf **Abc Defg Hijk** fgff jfkjgk djkfkgf
 Akggf **Abc ** fgff jfkjgk djkfkgf
 Akggf **Abc Defg  fgff jfkjgk djkfkgf
 gjshgs gskk **Xyz Lmn jkf**
 fgsgdf fkgksk **Xyz Lmn**"""

searchWords = []
for line in (line for line in searchTxt.split('\n') if line.strip()):
    words = line.split()
    searchWords.extend([' '.join(words[:i]) for i in xrange(len(words), 0, -1)])

searchWords = sorted(searchWords, key=len, reverse=True)# to look first for the longest string match

res = set([line for sword in searchWords for line in data.split('\n') if sword in line])

# OR

res = []
for line in data.split('\n'):
    for sword in searchWords:
        if sword in line:
            res.append(line)
            break

如果你需要获取完整的文本:

resultText = '\n'.join(res)

撰写回答