将两个正则表达式连接在一起

时间:2012-11-23 23:53:40

标签: python regex

我有两个正则表达式,一个匹配所有字符[a-z],另一个不包括以下字符组合[^spuz(ih)](字符s, p, u, z, ih)我如何将这两个结合起来以便我可以允许除第二个RE中列出的字符以外的所有字母数字字符?

(re.match(r'^[a-z]*(?![spuz]|ih)[a-z]s$', insert_phrase)

1 个答案:

答案 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$'