2016-03-15 2 views
0

У меня есть набор строк, например:Получить строку слов внутри строки (регулярное выражение Java)

HH, 123 Hello My Name Is John 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

Wow your amazing! – QQQ

+0

Что именно вы хотите, чтобы регулярное выражение соответствовало? Тот, который вы используете в настоящий момент, будет соответствовать символу пробела (включая вкладку и т. Д.), За которым следует один или несколько буквенных символов без пробелов между ними. – DanielGibbs

ответ

0

Ваше регулярное выражение неверное. Он соответствует только space, а затем любому количеству заглавных и строчных букв, вам нужно его захватить еще одно пространство в конце. Если вы не добавить дополнительный поиск пространства, то каждая группа будет: «Привет» «Мой» «Имя» и т.д ..

Попробуйте это:

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

Как было отмечено в комментариев, это простое регулярное выражение будет содержать как ведущее пространство & конечное пространство. Это может быть легко удалена с помощью .trim()

Вы можете проверить регулярное выражение here

+0

Хотя это самый короткий шаблон, предложенный, он также захватит конечные пробелы. –

+0

Правильно, ничто '.trim()' не может исправить :), видя, что есть также ведущее пространство. – JanR

+0

Конечно, но это должно быть частью ответа, который я предполагаю. –

Смежные вопросы