正则表达式查找具有特定长度的子字符串,该子字符串包含特定字符的最小出现次数

时间:2015-06-01 06:13:46

标签: regex

是否有任何正则表达式来查找具有特定长度的子字符串,该子字符串包含特定字符串的最小数量?

例如,我有一个字符串,例如:AABABAAAAA对于这个字符串,我们有一个长度为5的子字符串,其中包含两个B => AABAB所以正则表达式应该找到它。

但对于AAAABAAAAB,没有任何长度为5的子字符串包含两个B.

假设我们的字符串只包含A和B,我们想要找到长度为5且至少包含两个B的子字符串:

AAAABAAAAB -> Invalid
AAAAAAAABB -> Valid
AAAAAAAAAABAABAAAAAA -> Valid
AAAABAAAAAAABAAAAAAA -> Invalid

2 个答案:

答案 0 :(得分:1)

蛮力:

.B..B|B...B|..BB.|.B.B.|..B.B|BB...|B.B..|...BB|B..B.|.BB..

嗯,我知道这样的正则表达式不可参数化。另一方面,可以通过编程方式获取它(示例在Python中):

import itertools

def get_regex(char, charnum, strsize):
    chars = char * charnum + "." * (strsize - charnum)
    return "|".join("".join(x) for x in set(itertools.permutations(chars)))

print get_regex("B", 2, 5)

答案 1 :(得分:0)

您可以使用此正则表达式:

(?=[^B]{0,3}B[^B]{0,3}B).{5}

RegEx Demo