2013-12-10 153 views
-1

前删除所有字符不能找出一个有效的正则表达式为:Java的正则表达式

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+\\$)]|(\\$)", "") 
} 

输入:whateverishere $$ annofun $编号$ WHAT_NEEDS_EXTRACTION $$号$

输出:WHAT_NEEDS_EXTRACTION

+0

您可以添加对应于您的输入样本数据的所需输出吗? – jwueller

+1

它总是一样的数字$? WHAT_NEEDS_EXTRACTION中有$吗?将字符串拆分为$并仅抓取第四个索引的值会更有意义吗? – powerj1984

回答

1

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

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

但我不确定它是否工作这在斯卡拉是这样的。

+0

@flavian确定,比请更新您的问题。我已经更新了答案。 –

+0

请问您是否可以验证您的问题并重新发布您使用的字符串,因为在您的问题中输入以'$ number $'结尾,而不是'$$ number $'。我无法重现后面的'$'。 –

+0

嗯,如果我在我的答案中执行代码,输出是'WHAT_NEEDS_EXTRACTION'。对不起,我无法重现与'$'尾随的问题。 –

0

我不确定它是否能在scala中工作,但在Java中,您可以将您感兴趣的部分包装在组中,并用来自该组的匹配替换整个匹配。

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

如果您提供实际输入和预期输出,我可以使此reegex更加准确。 – Pshemo