Regexp для извлечения заглавных слов не в начале предложения, а в двух смежных словах - PullRequest
2 голосов
/ 17 ноября 2010

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

Я использую:

(\w*)\b([A-Z][a-z]\w*)\b(\w*)

заменить на:

$1 -- $2 -- $3

Редактировать: он возвращает только 2 доллара. Попробую предложения.

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

Ответы [ 2 ]

2 голосов
/ 17 ноября 2010

Как насчет этого?

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

Это не учитывает ничего не алфавитного.Также предполагается, что все слова разделены одним пробелом.Вам нужно будет изменить его, если вы хотите более сложную поддержку.

1 голос
/ 17 ноября 2010

Прямо сейчас ваше регулярное выражение не выполняется, потому что \b никогда не может совпадать. Соответствует только между буквенно-цифровыми и не буквенно-цифровыми символами; поэтому он никогда не может совпадать между \w* и [A-Z] или другим \w*.

Итак, вам нужны другие (= не алфавитно-цифровые) символы между словами:

Попробуйте

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

хотя (если ваш движок регулярных выражений позволяет использовать свойства Unicode), вы могли бы быть счастливее с

(\w*)\W+(\p{Lu}\p{Ll}\w*)\W+(\w*)

Как написано, только заглавные слова длиной 2 или более совпадают, т.е. е. «Я» (как в «я») не будет соответствовать этому. Я полагаю, вы вставили [a-z], чтобы избежать совпадений, таких как "IBM"? Или каково было ваше намерение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...