正则表达式用于平衡弦

问题描述

我有一个仅包含字母a,b,c和d的字符串。

如果同时满足以下两个条件,则表示该字符串是平衡的:

a和c的总和是偶数 b和d的总数是偶数。

示例:abcd是平衡字符串,而abc是不平衡字符串。

需要一个正则表达式来匹配平衡的字符串。 尝试过此正则表达式,但在少数情况下不起作用,失败并显示StackOverflowError “ ^(?=(?:(?:[ac] [bd]){2}) [ac] $)(?:(?:[bd] [ac]){2}) [bd] $“

解决方法

一种方法可能是将输入字符串的长度与删除了a|cb|d的长度进行比较,并断言这种差异是均匀的:

def isBalanced(inp):
    if (len(inp) - len(re.sub(r'a|c','',inp))) % 2 == 0 and
       (len(inp) - len(re.sub(r'b|d',inp))) % 2 == 0:
        return True
    else:
        return False

print(isBalanced("abcd"))      # True
print(isBalanced("abc"))       # False
print(isBalanced("aabbcccd"))  # False
,

您会考虑使用函数而不是正则表达式吗?您可以将其应用于每个单词,然后返回正确的单词:

def check_balanced(string_):
    a_c = string_.count('a') + string_.count('c')
    b_d = string_.count('b') + string_.count('d')
    if (a_c*b_d)%4 == 0:
        return True
    else:
        return False