2013-06-27 16 views
0

末匹配我有一個字符串,它是採用以下格式:模式的字符和行

I am extracting this Hello:A;B;C, also Hello:D;E;F 

我如何提取字符串A;B;CD;E;F

我已經寫了下面的代碼片段中提取,但不能夠提取的最後一個匹配字符D;E;F

Pattern pattern = Pattern.compile("(?<=Hello:).*?(?=,)"); 

回答

0

$意味着結束行。

因此這應該工作:

Pattern pattern = Pattern.compile("(?<=Hello:).*?(?=,|$)"); 

所以你看,提前爲逗號或最終的線。

Test

+0

感謝評論Dukeling,但不工作。事實上它甚至不匹配即使A; B; C。 是的,我正在尋找,或結束行。 – Brinal

+0

[它似乎適用於我](https://ideone.com/OAo4lC)。 – Dukeling

+0

Dukeling,是的,它工作正常。 非常感謝。 – Brinal

0

試試這個:

String test = "I am extracting this Hello:Word;AnotherWord;YetAnotherWord, also Hello:D;E;F"; 
// any word optionally followed by ";" three times, the whole thing followed by either two non-word characters or EOL 
Pattern pattern = Pattern.compile("(\\w+;?){3}(?=\\W{2,}|$)"); 
Matcher matcher = pattern.matcher(test); 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 

輸出:

Word;AnotherWord;YetAnotherWord 
D;E;F 
+0

梅納,實際上A B C可以是任何其他正常字符。這些也可以是單詞。 – Brinal

+0

@Brinal權利。看我的編輯。如果alnums不夠用,你也可以使用Unicode類別。 – Mena

+0

我認爲你有3場比賽的計數。如果我的字符串是 String s =「我提取這個Hello:Word; AnotherWord; YetAnotherWord,YetYetAnotherWord也是你好:D; E; F」它不起作用。 也特別不符合「你好」。我希望它匹配特定的標籤。 感謝您的回覆。 – Brinal

-1

假設你的意思在字符串中省略某些模式:

String s = "I am extracting this Hello:A;B;C, also Hello:D;E;F" ; 
    ArrayList<String> tokens = new ArrayList<String>(); 

    tokens.add("A;B;C"); 
    tokens.add("D;E;F"); 

    for(String tok : tokens) 
    { 
     if(s.contains(tok)) 
     { 
      s = s.replace(tok, ""); 
     } 
    } 
    System.out.println(s);