如何将这三个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
这个词对于实现非常重要。
答案 0 :(得分:2)
我认为您正在寻找negative lookahead regex:
regex = re.compile(r"^(?!.*(?:€|£|\b(?:Euro?|Pound|GBP|Yen|JPY)\b))", re.UNICODE | re.I)
如果在输入中找到上述任何字符串,那么匹配基本上会失败。请注意,€
和£
不需要\b
(字边界),因为这些货币符号不会被视为字符。