用于在组之前删除所有字符的Java正则表达式

时间:2013-12-10 15:33:33

标签: java regex scala

无法找出有效的正则表达式:

whateverishere$$annofun$number$WHAT_NEEDS_EXTRACTION$$number$

我想删除$$anonfun之前的所有字符,$$anonfun本身,然后删除$number$组。 我有这个:

val index = fullName.indexOf("$$anonfun")
if (index != -1) {
  val str = fullName.substring(index + 9, fullName.length)
  str.replaceAll("[(\\$\\d+\\$)|(\\$)]", "")
} else {
  fullName.replaceAll("[(\\$\\d+\\$)]|(\\$)", "")
}

输入:无论如何$$ annofun $ number $ WHAT_NEEDS_EXTRACTION $$ number $

输出:WHAT_NEEDS_EXTRACTION

2 个答案:

答案 0 :(得分:1)

试试这个"[^$]*\\$\\$[^$]*\\$[^$]*\\$|\\$\\$[^\\$]*\\$"

String replaced = "whateverishere$$annofun$number$WHAT_NEEDS_EXTRACTION$$number$"
            .replaceAll("[^$]*\\$\\$[^$]*\\$[^$]*\\$|\\$\\$[^\\$]*\\$",
                    "");
System.out.println(replaced);

但我不确定它是否在scala中有效。

答案 1 :(得分:0)

我不确定它是否适用于scala但是在Java中你可以将你有趣的部分包装在组中并用该组中的匹配替换整个匹配。

"whateverishere$$annofun$number$WHAT_NEEDS_EXTRACTION$number$"
  .replaceAll(
  "whateverishere\\$\\$annofun\\$number\\$(WHAT_NEEDS_EXTRACTION)\\$number\\$",
  "$1");