加入多个re.compile时插入负向前瞻

时间:2015-09-08 13:36:54

标签: python regex

如何将这三个re.compile加入统一的正则表达式,然后将其用于否定前瞻?即如果字符串s中没有匹配项,则:[执行某些操作]。

regex_eur = re.compile(r"\b(Euro)\b|\b(EUR)\b|\b(\€)\b", re.I)
regex_gbp = re.compile(r"\b(Pound)\b|\b(GBP)\b|\b(\£)\b", re.I)
regex_jpy = re.compile(r"\b(Yen)\b|\b(JPY)\b", re.I)

我的尝试:

regex_all = re.compile(r"\b(?:%s)\b" % "|".join([regex_eur, regex_gbp, regex_jpy]))

if not re.search(regex_all, s):
    #Do something

请注意,这不使用负向前瞻,只是if not似乎不起作用。如果这确实是正确的方法,我不确定如何使用.join附加负向前瞻。

修改:澄清我的目标。

我想确保字符串中没有正则表达式“关键字”。即以下任何一项都不允许:“欧元”,“欧元”,“欧元”,“英镑”,“英镑”,“英镑”等。

我决定使用正则表达式,因为边界\b这个词对于实现非常重要。

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找negative lookahead regex

regex = re.compile(r"^(?!.*(?:€|£|\b(?:Euro?|Pound|GBP|Yen|JPY)\b))", re.UNICODE | re.I)

如果在输入中找到上述任何字符串,那么匹配基本上会失败。请注意,£不需要\b(字边界),因为这些货币符号不会被视为字符。