Python:子字符串前 4 个单词(如果存在)



我想在一个特定的单词中有 4 个单词。 如果只有 3 个 wrords 之前,我希望打印 3 个单词。

例: 输入:墙上坐着坏猫 输出:是坏的

行是有句子。

if 'CAT' in line: 
print(line.split('CAT')[0].split()[len((line.split('CAT')[0]))-3): len(line.split('CAT')[0])])

如果我错过了什么,是否有任何其他有效的方法,您能告诉我吗?

计划做 line.split(CAT([0] 来获取 cat 之前的所有数据。 再次我想从len-0开始获得[3]的输出到len。 它给 错误 我错过了什么。 如果只有 2 个单词,我也可以添加一个条件,只打印 2

你走在正确的轨道上。如果要在字符串S中获取D之前的三个单词,如果可用单词少于三个,则默认为较少的单词,则可以使用以下命令:

S.split(D)[0].split()[-3:]

例子:

>>> S = 'There is a bad CAT sitting on the wall'
>>> S.split('CAT')[0].split()[-3:]
['is', 'a', 'bad']
>>> S = 'The bad CAT is sitting on the wall'
>>> S.split('CAT')[0].split()[-3:]
['The', 'bad']

当然,如果您希望将其重新连接到字符串中,您可以使用:

' '.join(S.split(D)[0].split()[-3:])

这也可以使用正则表达式来实现,但我怀疑它会提供更好的性能。

拆分开头的行,然后在结果列表中找到所需单词的索引。然后,您可以对列表进行切片(确保切片的开头不小于零(,然后再次将其重新连接在一起。如果前面少于 3 个单词,则只会显示其中的内容。

line = "There is a bad CAT sitting on the wall"
sline = line.split(' ')
if 'CAT' in sline:
pos = sline.index('CAT')
print(' '.join(sline[max(0, pos-3):pos]))

IMO,试图在一行中完成所有这些操作会使事情变得过于混乱。我建议你把它分成更小的部分。

if line.find('CAT') != -1:
words = line.split('CAT')[0].strip().split(' ')
print(words[max(len(words) - 3, 0):])

一些事情的解释:

  • 是的,有些人会认为'CAT' in line更 Pythonic,但我更喜欢line.find('CAT') != -1,因为它不会忽略如果line不是字符串时可能发生的一些错误。有关该函数的详细信息,请参阅 str.find(( 文档。
  • 第 2 行中的 strip(( 确保删除尾随空格。
  • 最后一行找到"CAT"之前第三个单词的位置(如果有(,然后将相应的单词打印为列表。如其他答案中所述,如果需要,您可以使用str.join((将它们作为字符串重新组合在一起。

相关内容

最新更新