2024-09-30 20:37:15 发布
网友
我有两个正则表达式,一个匹配所有字符[a-z],另一个不包括下列字符组合[^spuz(ih)](字符s, p, u, z, ih),如何组合这两个,以便允许除第二个RE中列出的字符外的所有字母数字字符?你知道吗
[a-z]
[^spuz(ih)]
s, p, u, z, ih
(re.match(r'^[a-z]*(?![spuz]|ih)[a-z]s$', insert_phrase)
你不能这样“组合”它们,但你可以写另一个正则表达式,它有同样的效果。为此,可以使用(?)构造。只有当正则表达式中的正则表达式与下面的部分不匹配时,它才匹配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$'
你不能这样“组合”它们,但你可以写另一个正则表达式,它有同样的效果。为此,可以使用(?)构造。只有当正则表达式中的正则表达式与下面的部分不匹配时,它才匹配0个字符。因此您可以使用:
或者,既然这不是你想要的,就改成:
在改变了的问题中,你似乎想要消极的向后看。这将使模式变成:
注意后面部分的额外[a-z]。它是必需的,因为lookback表达式必须是固定宽度的。这意味着像“ps”这样的字符串将与模式匹配,但您不希望这样。因此,最好使用两个单独的lookbehind(两个lookbehind都必须为true,字符串才能匹配):
相关问题 更多 >
编程相关推荐