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

r0u*_*u1i 5 python regex

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

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

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

per*_*eal 5

只要不跟随try(),这个匹配最多3({1,3})个单词:going to the(?!to try)

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()
Run Code Online (Sandbox Code Playgroud)

产量

luna park
capital city of
moon
Run Code Online (Sandbox Code Playgroud)

  • @EOL考虑"去月球试试......":"月亮"`之后是`试试'而未能超前.引擎回溯一个空间,然后匹配.现在下一个字符是空格,它与`\ w`不匹配,所以你没有得到第二个字. (2认同)