2015-03-26 2 views
0

Я хочу получить все слова, начинающиеся с заглавной буквы, но также группы последовательных слов, начинающиеся с заглавных букв.Regex, чтобы получить слова или слова, начинающиеся с заглавной буквы

Например, в предложении

Обама заявил журналистам в Вашингтоне, что он и Нетаньяху выступает против на призывы Ирана к «Смерть Америке»

Я хочу, чтобы получить

[Obama, Washington, Netanyahu, Iran's, Death To America] 

Я пробовал

([A-Z][a-z]*\s)+ 

означает «прописную букву», за которой следует любое количество маленьких букв, за которым следует пробел, любое количество раз.

Я, хотя это сработает, но это не так. Какие-либо предложения?

+1

Почему «Смерть Америке» удовлетворяет вашему критерию? – HuStmpHrrr

+0

Вы используете pcre? – HuStmpHrrr

+0

Объясните это>, но также и группы последовательных слов, каждое из которых начинается с заглавных букв. – LumberHack

ответ

1

Iran's не соответствует [A-Z][a-z]; добавьте ' в свой комплект.

Death To America не соответствует полностью, потому что последнее слово не сопровождается пробелом.

И фиксируется

([A-Z][a-z']*)(\s[A-Z][a-z']*)* 

У вас нет слов, которые не начинаются с заглавной буквы, но имеют один между ними; если вы хотите, чтобы игнорировать их, используйте Перерывы слов:

\b([A-Z][a-z']*)(\s[A-Z][a-z']*)*\b 
1

Вы можете изменить свое регулярное выражение, используя необязательную группу, которая повторяет «ноль или больше» раз.

[A-Z][a-z']+(?: [A-Z][a-z]+)* 

Live Demo

+1

Если вы хотите, чтобы он соответствовал одной заглавной букве, просто измените первый символ '+' на '*' ... – hwnd

0

предположим, что вы предпочитаете самый длинный матч, то

([A-Z][\w']*(?:\s+[A-Z][\w']*)*) 

применяются g, должны получить все группировки.

[A-Z][\w']* 

соответствует индивидуальному слову, которое вы хотите совместить.

затем

(?:\s+[A-Z][\w']*)* 

будет соответствовать произвольное число последовательности такого рода слов.

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