-1

我一直在寻找一种在找到的匹配项周围抓取单词的方法,但对于我的情况来说它们太复杂了。我只需要一个正则表达式来抓取,比如说 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's 之前和之后的 3 个单词(已经清理以匹配)。输出将是:

   "ate the brown/yellow smore's that the were"

现在让我们以想要在 stinkin' 前后各取一个词为例:

   "yellow, stinkin' dog"

另一个例子。“坐”:

   "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}')

谢谢

4

2 回答 2

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)

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

于 2012-06-14T22:03:01.973 回答
1

这个正则表达式会让你开始

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

第 1 组将包含目标之前的单词,第 2 组将包含目标之后的单词

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

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

你可以通过阅读这个简短的建议来改进你的问题http://worksol.be/regex.html

在此处输入图像描述

于 2012-06-14T20:54:16.317 回答