2012-05-25 42 views
4

我想刪除跟隨我的正則表達式匹配的字符串的一部分。在Java中使用正則表達式匹配後刪除部分字符串

我想製作一個電視節目組織節目,並且我想在表單SXXEXX中的X和一個數字後面的季節和情節標記之後切斷名稱中的任何內容。

我很容易掌握正則表達式模型來創建應該正確匹配的「[Ss] \ d \ d [Ee] \ d \ d」。

我想使用Matcher方法end()獲取匹配字符串中的最後一個索引,但它似乎並沒有像我認爲的那樣工作。

Pattern p = Pattern.compile("[Ss]\\d\\d[Ee]\\d\\d"); 
Matcher m = p.matcher(name); 

if(m.matches()) 
    return name.substring(0, m.end()); 

如果有人能告訴我爲什麼,這並不工作,並提出了適當的方式做到這一點,那將是巨大的。謝謝。

回答

5

matches()試圖將整個字符串再次模式相匹配。如果您想要在字符串中查找您的模式,請使用find()find()將搜索字符串中的下一個匹配項。

你的代碼可能是不太一樣:

if(m.find()) 
    return name.substring(0, m.end()); 
+0

謝謝,這是我遇到的另一個簡單問題。 –

1

這應該工作

.*[Ss]\d\d[Ee]\d\d 

在java中(我生鏽),這將是

String ResultString = null; 

Pattern regex = Pattern.compile(".*[Ss]\\d\\d[Ee]\\d\\d"); 
Matcher regexMatcher = regex.matcher("Title S11E11Blah"); 
if (regexMatcher.find()) { 
    ResultString = regexMatcher.group(); 
} 

希望這有助於

4

matches整個字符串相匹配時,嘗試find()

你可以捕捉到的名稱,以及:

String name = "a movie S01E02 with some stuff"; 
Pattern p = Pattern.compile("(.*[Ss]\\d\\d[Ee]\\d\\d)"); 
Matcher m = p.matcher(name); 

if (m.find()) 
    System.out.println(m.group()); 
else 
    System.out.println("No match"); 

將捕獲和打印:

一部電影S01E02