python正则表达式匹配返回完整句子

时间:2012-05-25 18:07:09

标签: python regex

我正在尝试编写一个正则表达式,在句子列表中找到单词“squirrel”。该表达式应返回包含单词“squirrel”的完整句子列表。

包含“squirrel”一词的句子可能如下所示:

  松鼠有一条长尾巴(。)长尾巴。(。)   猫(a)n(d)松鼠(a)n(d)兔子(a)n(d)bunnys(a)n(d)(。)
  松鼠+尾巴

目前re我看起来像这样

word_only += re.findall('(.*?' + word + '?!\S)', sentence)  
word_only += re.findall('.*?' + word + '\S+', sentence)   

但它只返回单词前面的任何内容(“松鼠”),而不是它之后。

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:4)

根本不需要在这里使用正则表达式。

#The example string:
s = '''the squirrel has a long tail (.) say (.) long tail .
cats (a)n(d) squirrels (a)n(d) rabbits (a)n(d) bunnys (a)n(d) (.)
the squirrel+has a tail'''

sentencelist = s.split(".") #split on periods
[sentence for sentence in sentencelist if sentence.find("squirrel") != -1]
#If you don't find any squirrels, hold fire! 

另一方面,如果你有缩写/标题,这个脚本会分成太多的句子。当我不得不解决这样的问题时,我最终使用像\.\s+(?=[A-Z])这样的正则表达式,然后拆分匹配。这修复了缩写,例如N.A.A.C.P.,但不是标题,例如史密瑟斯先生。我最终建立了一个标题词典,并且直到我完成重新计算和计数之后才对这些期间进行修改。 YMMV。

答案 1 :(得分:0)

如果我理解正确,你有一个字符串列表,每个字符串都包含一个句子

squirrel_sentences = []
for sentence in sentences:
    if re.match(word):
       squirrel_sentences.append(sentence)

如果您有一个包含多个句子的单个字符串,您可以尝试使用此正则表达式的匹配项,它会查找包含squirrel的句点到句点的跨度(也支持包含\A\Z)的第一句和最后一句:

(?:\A|(?<=.))[^.]*squirrel[^.]*(?:.|\Z)