python - 使用正则表达式来匹配顺序无关的字符组(在子字符串中)同时限制给定字符可以出现的次数的优雅方法?

标签 python regex

这是 earlier question 的后续内容。此问题将问题修改为原始意图,并通过添加正则表达式使用子字符串的要求来增加复杂性。

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

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

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

在这种情况下,以下子字符串匹配:

AAAA AAAB AAAC AAAD AABA AABB AABC AABD AACA AACB AACC AACD AADA AADB AADC ABAA ABAB ABAC ABAD ABBA ABBB ABBC ABBD...

并且以下子字符串将不匹配:

CCCC DDDD DDDA DDAA DDAB ...

我把match list here .

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

最佳答案

使用此模式作为子字符串来匹配您的条件

(?!B{4})(?!C{4})(?!([ABC]?D){2})[A-D]{4}  
(?!B{4})            # does not see 4B's
(?!C{4})            # does not see 4C's
(?!([ABC]?D){2})    # does not see 2D's in any order
[A-D]{4}            # [A-D] 4 times

编辑:
阅读下面的评论后,尝试一下这种模式:

(?!B{4})(?!C{4})((?!.?.?DD|.?D.D|D..D)[A-D]{4})

Demo

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

相关文章:

javascript - 查找未排序和排序列表之间的最小距离

java - 解析Jetty日志记录

c# - 多个键的正则表达式 :Value Search Terms

javascript - 如何用javascript仅替换字符串中最后一次出现的数字?

python - 查找字符串中的特殊符号

python - python有数量限制吗?

c# - 我如何对集合中的重复项进行分组?

java - 模式.编译 ("(.*?):")

python - 使用 Xlsxwriter 和 PyQt4 时出现段错误

python - Python中的非零算术检查