2017-06-20 96 views
1

我有有的Java模式的正則表達式

1-FN3Z1-206329557431 
1-FN411-153115736976 

當我試圖刪除值的前兩個部分列一個2列TSV文件(即提取206329557431153115736976)。我用正則表達式的在線工具來生成模式

模式

".*?\\d+.*?\\d+.*?(\\d+)"".*?\\d+.*?\\d+.*?\\d+.*?(\\d+)"

獨立,他們工作得很好。我試圖尋找一個組合的正則表達式模式。任何指示如何做到這一點。

+0

你只是想第二個連字符後的一切嗎?你只是想跳過前8個字符?什麼準確定義你想要捕捉的部分? – khelwood

+0

'String str =「1-FN3Z1-206329557431」; str.substring(str.lastIndexOf(「 - 」));' – john

回答

4

爲什麼不例如使用split

String spl = "1-FN411-153115736976".split("-")[2]; 

如果你想要一個正則表達式,你可以使用(.*?-){2}(.*),這意味着得到第二個後的所有東西-

regex demo

輸出

206329557431 
153115736976 
1

如果您的TSV文件中的字符串都具有相同的寬度和圖案,然後你可以用串這裏:

String tsv = "1-FN3Z1-206329557431"; 
System.out.println(tsv.substring(8)); 

Demo

+0

W'll,如果我必須把它放在一個正則表達式規則中,怎麼會這樣做。你提出的那個,肯定有效。我只是想了解如何編寫正則表達式 – Betafish

+0

@Betafish更新您的問題並告訴我們關於TSV字符串可能的樣子的規則。然後可以寫出一個確切的模式。如果它們都是固定的寬度,那麼我建議在這裏使用子字符串;你不需要正則表達式。 –

1

怎麼樣這個正則表達式:.-.{5}-看起來像它可以匹配所有的聲明,但它取決於你的格式。 Example of pattern work

下面是Java代碼示例:

@Test 
public void test() { 
    String test = "1-FN3Z1-206329557431 1-FN411-153115736976"; 

    String result = test.replaceAll(".-.{5}-", ""); 

    assertEquals("206329557431 153115736976", result); 
}