2012-03-22 74 views
2
String str = "Text0TEXT1.more text "; 
String str = "Text0TEXT1(more text "; 
String str = "Text0TEXT1{more text "; 

如果我有一條線,它可能是幾個字符,如。或者(或{或;我怎麼能提取TEXT1只java的正則表達式提取,直到特殊字符

更新:有文本0文本1日之前和特殊字符可能會或可能不存在

更新2

String str = "Beginning text Text I want . Text I don't want" 
String str = "Beginning text with numbers Text I want (Text I don't want)" 
String str = "Beginning text with numbers Text I want { Text I don't want }" 

我需要提取「文本我想要」,但我得到了文字到最後的休息特殊字符({:。

+1

您可以使用包含這些字符的編譯模式進行分割。 – 2012-03-22 16:53:12

+0

關於你的編輯,你想找回'Text0TEXT1'還是隻有'TEXT1'? – Shaded 2012-03-22 17:01:38

+0

@shaded只有文本1 – tnaser 2012-03-22 17:02:35

回答

3

如何:

^(?:[a-zA-Z ]+[0-9]+)?([a-zA-Z ,]+) 

您想要的文字是第1組。

說明:

^     : begining of string 
    (?:    : start non capture group 
    [a-zA-Z ]+ : one or more letter or space 
    [0-9]+  : one or more digit 
        : a space 
)?    : end of group optional 
    (    : start capture group 1 
    [a-zA-Z ,]+ : one or more letter, sapce or coma 
)    : end of group 
+0

這將刪除該str的最後一部分,但我想要的文本可以包含,也 – tnaser 2012-03-22 18:10:27

+0

@tnaser:只需添加允許的字符在char類中。看我的編輯。 – Toto 2012-03-22 18:12:20

+0

聽起來不錯。我沒有完全理解它。第一部分會接受任何字符期望什麼?我如何提取我想要的文字?它包含像「我想要的文本1文本」或「需要文本1文本」的模式。 – tnaser 2012-03-22 18:23:15

0
str.split("[^\\w\\s]+")[0] 

這將匹配所有連續[A-ZA-Z_0-9]從線

List<String> str = new ArrayList<String>(); 
str.add("TEXT1.more text "); 
str.add("TEXT1)more text "); 
str.add("TEXT1}more text "); 
str.add("Beginning text Text I want . Text I don't want"); 
str.add("Beginning text with numbers Text I want (Text I don't want)"); 
str.add("Beginning text with numbers Text I want { Text I don't want }"); 
for(String s : str) 
    System.out.println("input: [" + s + "], first word: " + s.split("[^\\w\\s]+")[0]); 

的開始字符和空格生產:

input: [TEXT1.more text ], first word: TEXT1 
input: [TEXT1)more text ], first word: TEXT1 
input: [TEXT1}more text ], first word: TEXT1 
input: [Beginning text Text I want . Text I don't want], first word: Beginning text Text I want 
input: [Beginning text with numbers Text I want (Text I don't want)], first word: Beginning text with numbers Text I want 
input: [Beginning text with numbers Text I want { Text I don't want }], first word: Beginning text with numbers Text I want 
+0

請檢查更新的示例 – tnaser 2012-03-22 17:54:35

0

我設置一個簡單的例子,將通過使用正向前查找匹配的正則表達式解決您的正則表達式:

[\w ]+(?=[.{(;]) 

正則表達式上面會前的特殊字符提取部分。

編輯:

對於TEXT0部分是否有一個特定的模式呢?

+0

不,它可以是任何文本,文本1有特殊模式。它始於。 「我需要的Text1文本」 – tnaser 2012-03-22 18:17:50