正则表达式:匹配单词或最大单词数

时间:2013-03-22 07:20:27

标签: python regex

我想找一个短语,跟随它后面的几个单词,但如果我找到另一个特定的短语,请提前停止。

例如,我想在“前往”之后匹配最多三个单词,但如果遇到“试试”,则停止匹配过程。因此,例如“前往月神公园”将导致“月神公园”; “前往首都秘鲁”将导致“首都”和“月亮尝试一些芝士蛋糕”将导致“月亮”。

可以使用单个简单的正则表达式(最好是在Python中)吗?我已经尝试了所有我能想到的组合,但却悲惨地失败了:)。

2 个答案:

答案 0 :(得分:5)

只要未跟随{1,3}尝试(going to the),此帖子最多可匹配(?!to try)后的3个import re infile = open("input", "r") for line in infile: m = re.match("going to the ((?:\w+\s*(?!to try)){1,3})", line) if m: print m.group(1).rstrip() 个字词:

luna park
capital city of
moon

<强>输出

{{1}}

答案 1 :(得分:-2)

我认为你正在寻找一种从句子中提取专有名词的方法。你应该看看NLTK的正确方法。正则表达式只能用于有限的上下文无关语法。另一方面,你似乎要求能够解析非平凡的人类语言(对于计算机而言)。