每当拆分字符恰好出现两次时拆分一个字符串

时间:2016-07-01 17:08:44

标签: java regex split

我的目标是在" yy"的所有情况下拆分字符串(使用Java或Scala)。那些既没有被跟随也没有另一个字母" y"。 例子:

"aa-yy-bb" -> ["aa-", "-bb"]
"aa-yyyy-bb" -> ["aa-yyyy-bb"]
"yyy-bb" -> ["yyy-bb"]
"yy-bb" -> ["","-bb"]
"aa-yy-bb-yy" -> ["aa-","-bb-",""]

我最终在mystring.split("(^|[^y])yy([^y]|$)", -1),但此解决方案无效,因为它会丢弃任何相邻的字符,例如,它会输出"aa-yy-bb" -> ["aa", "bb"]

当然这种拆分可以通过手动解析来解决,但我想知道是否存在(优雅的)模式匹配解决方案。你能找到一些吗?

2 个答案:

答案 0 :(得分:5)

为那个

做了一些看法

Regex101

(?<!y)yy(?!y)
  • (?<!y)否定的背后隐藏
  • yy匹配字符yy字面意思(区分大小写)
  • (?!y)否定前瞻

答案 1 :(得分:1)

根据Pattern类的文档,您可以使用以下表达式:

\byy\b
  • \b字边界

只与yy作为整个单词匹配。即使为这些任务做了前瞻,在这种情况下边界匹配器也会更短。

编辑:此答案不适用于所有有效输入。