2013-12-10 198 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