我想找一个短语,跟随它后面的几个单词,但如果我找到另一个特定的短语,请提前停止。
例如,我想在“前往”之后匹配最多三个单词,但如果遇到“试试”,则停止匹配过程。因此,例如“前往月神公园”将导致“月神公园”; “前往首都秘鲁”将导致“首都”和“月亮尝试一些芝士蛋糕”将导致“月亮”。
可以使用单个简单的正则表达式(最好是在Python中)吗?我已经尝试了所有我能想到的组合,但却悲惨地失败了:)。
答案 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的正确方法。正则表达式只能用于有限的上下文无关语法。另一方面,你似乎要求能够解析非平凡的人类语言(对于计算机而言)。