2012-05-25 45 views
1

我想写一个正则表达式,它将在句子列表中找到单词“松鼠”。表达式应返回包含“松鼠”一词的完整句子列表。包含单词“松鼠”Python正则表达式匹配返回完整句子

句子看起来像下面的句子:

松鼠有一个长长的尾巴说长尾()()。
猫的(a)N(d)松鼠的(a)N(d)兔(一)N(d)bunnys的(a)N(d)(。)
松鼠+具有尾

目前re我看起来像这样

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

但它只返回无论是在字(“松鼠”)的前面,而不是之后。

任何想法?谢谢

+0

你将需要're.finditer'为每一个获得'match.group(0)' – JBernardo

回答

0

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

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

如果您有包含多个句子一个一个字符串,你可以试试这个正则表达式,它发现人物的跨度从期间包含squirrel周期(也支持第一和的比赛最后一句与\A\Z):

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

re.match找到太多的项目 – user1413230

+0

如果我这样做,这个句子被分解成字符,每个字符是squirrel_sentences的一个元素。为什么 – user1413230

+1

'如果re.match(word):'更容易阅读。 – cheeken

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.C.P.,但不包括标题,例如史密瑟斯先生。我最终创建了一个标题字典,并且直到完成regexing和计数之后才将这些时间段提取出来。因人而异。