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

2024-04-25 02:21:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: rematch字母数字字符insertihphrase
1条回答
网友
1楼 · 发布于 2024-04-25 02:21:26

你不能这样“组合”它们,但你可以写另一个正则表达式,它有同样的效果。为此,可以使用(?)构造。只有当正则表达式中的正则表达式与下面的部分不匹配时,它才匹配0个字符。因此您可以使用:

'(?![spuz(ih)])[a-z]'

或者,既然这不是你想要的,就改成:

'(?![spuz]|ih)[a-z]'

在改变了的问题中,你似乎想要消极的向后看。这将使模式变成:

'^[a-z]*(?<![a-z][spuz]|ih)s$'

注意后面部分的额外[a-z]。它是必需的,因为lookback表达式必须是固定宽度的。这意味着像“ps”这样的字符串将与模式匹配,但您不希望这样。因此,最好使用两个单独的lookbehind(两个lookbehind都必须为true,字符串才能匹配):

'^[a-z]*(?<![spuz])(?<!ih)s$'

相关问题 更多 >