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

标签 python regex

我正在寻找一种方法来使用 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})

关于python - 使用正则表达式匹配不同字符组顺序同时限制给定字符可以出现多少次的优雅方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26810021/

相关文章:

python - PySpark 应用程序在 Yarn 集群模式下提交错误

javascript - 在 javascript 中使用负向后查找来转义@@

python根据分隔符查找子字符串

java - 如何匹配双斜杠之间的文本而不是网址?

python ftplib 奇怪的行为

python - 需要 Django 外键吗?

python - 减少 py2exe 分布大小,同时包含一些 numpy 函数

python - 将两个列表合并为一个列表,其中它们共享相同的值,并使用列表理解删除重复项

python - 匹配除模式以外的所有内容并替换为字符串

javascript - 将连字符包含到这个正则表达式中,怎么样?