我正在寻找一种方法来搜索找到的匹配项周围的单词,但它们对我的情况来说太复杂了。我需要的只是一个正则表达式的声明来抓取,比方说10,匹配单词之前和之后的单词。有人能帮我设置一个模式吗?
例如,让我们接受句子(没有意义):
sentence = "The hairy yellow, stinkin' dog, sat round' the c4mpfir3 and ate the brown/yellow smore's that the kids(*adults) were makin."
并且假设我们希望在smore之前和之后匹配3个单词(已经清理匹配)。输出将是:
"ate the brown/yellow smore's that the were"
现在让我们举一个想要在stinkin'之前和之后取一个单词的例子:
"yellow, stinkin' dog"
另一个例子。 “SAT”:
"yellow, stinkin' dog, round' the and
现在让我们开一个新句子:
sentence = "If the problem is still there after 30 minutes. Give up"
如果我试图匹配那里的单词,并在输出之前和之后取2个单词:
"is still there after minutes"
我知道它不是10,但我认为你得到了榜样?如果没有,请告诉我,我会提供更多。当我做到这一点时,我意识到我想要的比我原先想象的要多得多。我对正则表达式很新,但我会给这个模式一个镜头。
('[a-zA-Z\'.,/]{3}(word_to_match)[a-zA-Z\'.,/]{3}')
由于
答案 0 :(得分:-1)
此正则表达式将帮助您入门
((?:\w*\s*){2})\s*word3\s*((?:\s*\w*){2})
第1组将具有目标之前的单词,第2组将具有
之后的单词在示例中,我选择捕获2个单词,但您可以随意调整。
让我知道它是如何进行的,以及它是否适用于您的输入。
您可以通过阅读此简短建议http://worksol.be/regex.html
来改善您的问题
答案 1 :(得分:-1)
这是“单词”的可能定义:一串非空格字符。这是另一个:一串字母和数字,但没有标点符号。 Python为两者提供了方便的快捷方式。
\w
是具有第二个含义(字母和数字)的任何“单词”字符,\W
是任何其他字符。像这样使用它:
m = re.search(r'((\w+\W+){0,4}grab(\W+\w+){0,4})', sentence)
print m.groups()[0]
如果您更喜欢第一个定义,只需使用\S
(任何不是空格的字符)和\s
(任何空格字符):
re.search(r'((\S+\s+){0,4}grab(\s+\S+){0,4})', sentence)
你会注意到我之前和之后都匹配零到四个单词。这样,如果你的单词在句子中排在第三位,你仍然会得到一个匹配。 (搜索是“贪婪的”所以如果可能的话,你总会获得四个。)