Skip to main content
 首页 » 编程设计

python之使用正则表达式匹配不同字符组顺序同时限制给定字符可以出现多少次的优雅方法

2025年05月04日27zhenyulu

我正在寻找一种方法来使用 python 正则表达式来匹配字符组,并限制一个字符在匹配中出现的次数。主要问题是字符的顺序无关紧要。

我想找到一个简单且可扩展的模式来表达如下内容:

  • 一起找出 3 个字符。
  • 所有字符都必须来自“ABC”组
  • 其中 0 到 3 个可以是“A”
  • 其中0到3个可以是'B'
  • 其中0到1个可以是'C'

在这种情况下,以下内容将匹配:

ABC ACB CBA BCA AAB ABA BAA AAC ACA CAA ABB BAB BBA BBB

并且以下内容不匹配:

CCC CCA CAC ACC CCB CBC BCC

我已经尝试了几种使用前瞻的方法,但还没有找到一种可以处理所有情况的方法。例如:

(?=C?[AB]{2,3})(?=[AB]{2,3}C?)(?=[AB]C?[AB])([ABC]{3})  

你可以see here at regex101 .

是否存在不涉及列出所有可能组合的此类匹配模式?

更新:感谢您的精彩回答。你扩展了我对正则表达式的理解。由于原始问题没有指定我是否要匹配子字符串并给出了相反的例子。我将选择最符合原问题精神的答案,并针对子字符串问题发布一个新问题。

请您参考如下方法:

使用这个模式

(?!.?C.?C)([ABC]{3}) 

Demo


使用这个模式来匹配一个子串

(?!CC.|C.C|.CC)([ABC]{3}) 

对于 A{0,4} B{0,4} C{0,2} D{0,1} 的 ABCD 使用此模式

(?!([ABD]?C){3}|([ABC]?D){2})([ABCD]{4})