2016-04-14 509 views
1

我的努力:我試着看類似的問題,但我無法弄清楚我的答案。我也嘗試使用網絡(https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/)自己弄清楚這一點,但我不能得到正確的答案。使用myString.replaceAll("_.+/[^.]*/", "");使用正則表達式java替換某個字符前後的字符串

試過我有一個字符串:String myString = "hello_AD123.mp3";

而且我想用正則表達式的Java爲了下劃線(包括IT)和(MP3播放)之前停止後刪除所有內容。我將如何做到這一點?

所以我想最終的結果是以下幾點:myString = "hello.mp3";

+3

'myString = myString.replaceFirst(「_ [^。] *」,「」);' –

+0

打我吧,很好 – dambros

+1

它確實刪除,我剛剛試過。 – dambros

回答

1

你的正則表達式沒有工作,因爲它匹配的東西從你的字符串中缺少:

  • _ - 下劃線,隨後用.. 。
  • .+ - 一個或多於一個換行
  • /以外的任何字符 - 字面/符號
  • [^.]* - 除零點以外的零個或多個字符
  • / - 字面/

輸入字符串中沒有斜槓。

您可以使用

String myString = "hello_AD123.mp3"; 
myString = myString.replaceFirst("_.*[.]", "."); 
// OR myString = myString.replaceFirst("_[^.]*", ""); 
System.out.println(myString); 

IDEONE Java demo

模式_[^.]*下劃線,然後比字面點其他0+字符匹配。 如果字符串之前有點.mp3"_.*[.]"匹配_直到最後.,並且需要用.替換。

請參閱regex Demo 1Demo 2

詳細

  • _ - 匹配_
  • [^.]* - 匹配零個或更多個(由於*量詞)比其他字符(因爲否定的字符類用於,見[^...])一字面點(如.在字符類內 - [...]) - 被視爲文字點字符(句號,句號)。

    • OR
  • .*[.] - 比換行到最後文字圓點其他0個或多個字符匹配(消耗點,從而,替換模式應該是".")。

.replaceFirst()的使用,因爲我們只需要執行搜索和替換操作。當匹配的子字符串匹配時,它將替換爲空字符串,因爲替換模式爲""

+0

你介意解釋你一個一個使用的正則表達式嗎?我很困惑,理解爲什麼這樣使用它。它雖然工作!謝謝 – deeveeABC

+1

我希望我說得更清楚:) –

+0

OP想刪除字符_between_'_'和'.mp3',因此它應該像'myString.replaceFirst(「_。* \\。mp3」,「_。 mp3「);'或(使用匹配組)'myString.replaceFirst(」(_)(。*)(\\。mp3)「,」$ 1 $ 3「);'。 – Andy

相關問題