2つの正規表現があります。1つはすべての文字に一致し、もう1つは次の文字の組み合わせ(文字)[a-z]
を除外します。これら2つを組み合わせて、2番目のREにリストされているものを除くすべての英数字を許可するにはどうすればよいですか?[^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$'
後読み部分の余分な[az]に注意してください。後読み式は固定幅でなければならないため、これが必要です。これは、「ps」のような文字列がパターンに一致することを意味しますが、それは望ましくありません。したがって、代わりに、2つの別々の後読みを使用することをお勧めします(文字列が一致するには、両方がtrueである必要があります)。
'^[a-z]*(?<![spuz])(?<!ih)s$'