所以我最近有一个面试问题要求我确定字符串是否平衡。字符串在这两个条件下是平衡的:
- “a”和“c”出现次数的总和是偶数。
- “b”和“d”出现次数的总和是偶数。
因此,在示例“cccddbba
”中,这些条件成立。出现 c (3)
+ 出现 a (1)
是 偶数 (1+3=4)
且出现 d (2)
+ b (2)
出现的次数是偶数 (2+2=4)
。字符串只能包含字符“a”、“b”、“c”和“d”。正则表达式应该适用于任何字符串,而不仅仅是这个示例。
我的任务只是为此编写正则表达式。我假设在后台他们计算使用我的正则表达式找到的“a”和“c”的匹配数并将它们相加。 'b' 和 'd' 也是如此。
我已经有一段时间没有接触正则表达式了,所以我做得很糟糕,只达到了 ^([ac])*?[db]*?([ac])*?$
,这显然是不正确的。
最佳答案
对每个断言使用单独的前瞻:
^(?=(([^ac]*[ac]){2})*[^ac]*$)(?=(([^bd]*[bd]){2})*[^bd]*$).*$
参见live demo .
这基本上是有效的,因为 ([^ac]*[ac]){2})
匹配成对的 [ac]
。剩下的就比较简单了。
关于java - 计算字符串中字符匹配的数量(仅限正则表达式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37448266/