java - 计算字符串中字符匹配的数量(仅限正则表达式)?

标签 java regex

所以我最近有一个面试问题要求我确定字符串是否平衡。字符串在这两个条件下是平衡的:

  1. “a”和“c”出现次数的总和是偶数。
  2. “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/

相关文章:

regex - 删除 SED 中指定标签内匹配前后的行

java - 高效的序列匹配算法

java - 100 继续使用 Jersey2+ 和 Jetty9+

java - 正则表达式获取2位数字,数字不立即在Java字符之前和之后

regex - 正则表达式检查任意位置的 3 个大写字母

Java : Extract numbers from a string

java - 内部类的属性具有外部类的泛型类型

java - powershell '<' 运算符保留供以后在 Java 中使用

java - 如何单击表格中的元素 按特定文本搜索

javascript - Google Apps 脚本中的 RegExMatch 等效项是什么?