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

python正则表达式匹配返回完整句子,python,regex,Python,Regex,我试图写一个正则表达式,在一系列句子中找到“squirrel”这个词。表达式应返回包含单词“squirrel”的完整句子列表 包含“松鼠”一词的句子可能类似于以下句子: 松鼠有一条长尾,比如说长尾。 猫(a)n(d)松鼠(a)n(d)兔子(a)n(d)兔子(a)n(d)兔子(a)n(d)() 松鼠有一条尾巴 我当前的re是这样的 word_only += re.findall('(.*?' + word + '?!\S)', sentence) word_only += re.findall

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

包含“松鼠”一词的句子可能类似于以下句子:

松鼠有一条长尾,比如说长尾。
猫(a)n(d)松鼠(a)n(d)兔子(a)n(d)兔子(a)n(d)兔子(a)n(d)()
松鼠有一条尾巴

我当前的
re
是这样的

word_only += re.findall('(.*?' + word + '?!\S)', sentence)  
word_only += re.findall('.*?' + word + '\S+', sentence)   
但它只返回单词(“squirrel”)前面的内容,而不返回后面的内容


有什么想法吗?谢谢

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

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

如果您有一个包含多个句子的单个字符串,您可以尝试此正则表达式的匹配,该正则表达式可以查找包含
squirrel
(还支持带有
\a
\Z
的第一个和最后一个句子)的各个句点之间的字符跨度:


(?:\A |)(?如果我理解正确,您有一个字符串列表,每个字符串包含一个句子

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

如果您有一个包含多个句子的单个字符串,您可以尝试此正则表达式的匹配,该正则表达式可以查找包含
squirrel
(还支持带有
\a
\Z
的第一个和最后一个句子)的各个句点之间的字符跨度:


(?:\A |)(?这里根本不需要使用正则表达式

#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.,但没有标题,例如Smithers先生。我最终建立了一个标题字典,并在我完成regexing和counting之后再对句点进行细分。YMMV。

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

#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.,但没有修复标题,例如Smithers先生。我最终建立了一个标题词典,并在我完成regexing和counting.YMMV之前对句点进行了子排序。

您需要
re.finditer
才能获得
匹配组(0)
对于每一个,您都需要
re.finditer
来获得
匹配。组(0)
对于每一个,如果我这样做,句子被分成字符,每个字符是松鼠句子的一个元素。如果我这样做,句子被分成字符,每个字符是松鼠句子的一个元素。为什么