2016-03-15 68 views
0

我有一系列的字符串,例如:得到一個字符串(正則表達式的Java)內部一串字

HH,123我的名字是約翰·123

,我使用後續的正則表達式表達獲得那句「大家好,我的名字是約翰」,

"\\s[A-Za-z]+" 

然後我使用以下方法來檢查,如果正則表達式我想要的詞組相符:

while(m.find()) { 
    System.out.println(m.group()); 
} 

我的問題是,爲什麼結果打印以下:

Hello 
My 
Name 
Is 
John 

,而不是「我的名字是約翰。

+0

使用'「\\ S [A-ZA-Z] +(?:\\ S + [A-ZA-Z] +) *「' –

+0

哇!你太棒了! – QQQ

+0

你想要什麼正則表達式匹配?您當前使用的那個將匹配一個空格字符(包括製表符等),後跟一個或多個字母字符,其間沒有空格。 – DanielGibbs

回答

0

你的正則表達式是不正確的。它只匹配space,然後是任意數量的大寫和小寫字母,您需要它在最後捕獲一個空格。如果不增加對空間的額外的搜索,然後每個小組將是:「你好」,「我的」,「姓名」等。

試試這個:

String regex = "\\s[A-Za-z\\s]+" 

正如指出的評論,這個簡單的正則表達式將包括前導空間&尾隨空間。這可以通過使用.trim()

很容易地刪除您可以測試你的正則表達式here

+0

雖然這是建議的最短模式,但它也會抓住尾隨的空格。 –

+0

這是正確的,沒有'.trim()'不能修復:),看到有一個領先的空間.. – JanR

+0

當然,但這應該是我猜的答案的一部分。 –

相關問題