1

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

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

1 回答 1

3

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

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

或者,由于这不是您想要的,请将其更改为:

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

在更改后的问题中,您似乎想要消极的向后看。这将模式转换为:

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

请注意后视部分中的额外 [az]。这是必需的,因为lookbehind 表达式必须是固定宽度。这意味着像 'ps' 这样的字符串匹配模式,但您不希望这样。因此,最好使用两个单独的lookbehinds(两者都必须为true才能匹配字符串):

'^[a-z]*(?<![spuz])(?<!ih)s$'
于 2012-11-23T23:59:41.077 回答