正则表达式提取匹配单词周围的一定数量的单词

时间:2012-06-14 19:58:03

标签: python regex django

我正在寻找一种方法来搜索找到的匹配项周围的单词,但它们对我的情况来说太复杂了。我需要的只是一个正则表达式的声明来抓取,比方说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}')

由于

2 个答案:

答案 0 :(得分:-1)

此正则表达式将帮助您入门

((?:\w*\s*){2})\s*word3\s*((?:\s*\w*){2})

第1组将具有目标之前的单词,第2组将具有

之后的单词

在示例中,我选择捕获2个单词,但您可以随意调整。

让我知道它是如何进行的,以及它是否适用于您的输入。

您可以通过阅读此简短建议http://worksol.be/regex.html

来改善您的问题

enter image description here

答案 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)

你会注意到我之前和之后都匹配零到四个单词。这样,如果你的单词在句子中排在第三位,你仍然会得到一个匹配。 (搜索是“贪婪的”所以如果可能的话,你总会获得四个。)

相关问题