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