我有两个正则表达式,一个匹配所有字符[a-z]
,另一个不包括以下字符组合[^spuz(ih)]
(字符s, p, u, z, ih
)我如何将这两个结合起来以便我可以允许除第二个RE中列出的字符以外的所有字母数字字符?
(re.match(r'^[a-z]*(?![spuz]|ih)[a-z]s$', insert_phrase)
答案 0 :(得分:3)
您不能将它们“组合”,但您可以编写另一个具有相同效果的正则表达式。为此,您可以使用(?!)构造。仅当其中的正则表达式不与以下部分匹配时,它才匹配0个字符。所以你可以使用:
'(?![spuz(ih)])[a-z]'
或者,由于这不是您想要的,请将其更改为:
'(?![spuz]|ih)[a-z]'
在改变的问题中,你似乎想要负面的背后隐藏。这会将模式转换为:
'^[a-z]*(?<![a-z][spuz]|ih)s$'
注意lookbehind部分中的额外[a-z]。这是必需的,因为lookbehind表达式必须是固定宽度。这意味着像'ps'这样的字符串将匹配模式,但您不希望这样。所以相反,最好使用两个独立的lookbehinds(两者都必须为true才能匹配的字符串):
'^[a-z]*(?<![spuz])(?<!ih)s$'