提取文本中匹配词左右指定数量的词语

2024-10-01 09:34:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在四处寻找一种方法来抓住一个找到的匹配词,但它们对我的情况来说太复杂了。我只需要一个regex语句来获取匹配单词前后的单词,比如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个单词(已经清理以匹配)。输出将是:

^{pr2}$

现在让我们举一个例子,想在臭屁之前和之后用一个词:

   "yellow, stinkin' dog"

另一个例子。”周六:

   "yellow, stinkin' dog, round' the and

现在我们来做一个新句子:

   sentence = "If the problem is still there after 30 minutes. Give up"

如果我试图匹配那里的单词,并在输出前后各取两个单词:

   "is still there after minutes"

我知道不是10,但我想你明白了吗?如果没有,让我知道,我会提供更多。当我做这个的时候,我意识到我想要的比我原来想象的要多。我对regex还是个新手,但我要尝试一下这种模式。在

    ('[a-zA-Z\'.,/]{3}(word_to_match)[a-zA-Z\'.,/]{3}')

谢谢


Tags: andtheis模式单词sentence例子regex
2条回答

你可以开始使用regex

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

第一组在你的目标之前有单词,第二组有后面的单词

在这个例子中,我选择捕捉2个单词,但是你可以随意调整它。在

让我知道它如何进行,如果它对你的输入有效。在

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

{1美元^

下面是“word”的一个可能的定义:一个非空格字符的字符串。还有一个:一串字母和数字,但没有标点符号。Python为两者提供了方便的快捷方式。在

\w是具有第二个含义的任何“单词”字符(字母和数字),而\W是任何其他字符。这样使用:

m = re.search(r'((\w+\W+){0,4}grab(\W+\w+){0,4})', sentence)
print m.groups()[0]

如果您喜欢第一个定义,只需使用\S(任何不是空格的字符)和\s(任何空格字符):

^{pr2}$

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

相关问题 更多 >