2012-11-14 39 views
0

我的格式爲* C文件:\ TEMP \ myfile_124.txt *正則表達式

我需要一個正則表達式,這將給我只是是數字「」無論是有在下劃線之後和擴展之前。

我嘗試了許多方法,最新的是

(.+[0-9]{18,})(_[0-9]+)?\\.txt$ 

我沒有得到期望的輸出。有人能告訴我什麼是錯的嗎?

 Matcher matcher = FILE_NAME_PATTERN.matcher(filename); 
     if (matcher.matches() && matcher.groupCount() == 2) { 
      try { 
       String index = matcher.group(2); 
       if (index != null) { 
        return Integer.parseInt(index.substring(1)); 
       } 
      } 
      catch (NumberFormatException e) { 

      } 
+0

第一組指定你應該在你的文件名中有18位數字,你沒有。 – 2012-11-14 09:43:40

回答

2

第一部分[0-9]{18,}指出你至少有18位數字,你沒有。

通常用正則表達式來表達它是一個好主意,使表達式儘可能簡單。我建議嘗試

_([0-9]+)?\\.txt$ 

注意:你必須調用find()方法,使其進行查找,否則它說: 「沒有找到匹配」


這個例子

String s = "C:\\Temp\\myfile_124.txt"; 
Pattern p = Pattern.compile("_(\\d+)\\.txt$"); 
Matcher matcher = p.matcher(s); 
if (matcher.find()) 
    for (int i = 0; i <= matcher.groupCount(); i++) 
     System.out.println(i + ": " + matcher.group(i)); 

打印

0: _124.txt 
1: 124 
+0

是的,這工作謝謝! – Abi

+0

由於文件名長度可能會增加,因此我給出了18作爲長度。除此之外,我的錯在哪裏?特別是在下劃線部分之後? – Abi

+0

您還指定它只能在[0-9]之間,這意味着0,1,2,3,4,5,6,7,8或9,並且您還有其他字母,如C,:,\,T,e ,m,p,\,m,y,f,i,l,e –

0

這可能爲你工作:(?:.*_)(\d+)\.txt 結果在比賽組中。 這其中使用正和先行將只匹配數:\d+(?=\.txt)

0
.*_([1-9]+)\.[a-zA-Z0-9]+ 

本組1將包含所希望的輸出。

Demo

0

你可以做到這一點

^.*_\([^\.]*\)\..*$ 
0
.*_([0-9]+)\.txt 

這應該工作了。當然,你應該加倍逃避Java。

+0

謝謝這也可以 – Abi