Регулярное выражение, которое выбирает все после первых последовательных заглавных слов

Я хотел бы выбрать все после первых нескольких последовательных заглавных слов. то есть:

Terry Smith is a good school teacher. She works tirelessly.

станет;

is a good school teacher. She works tirelessly.

Пока это не работает;

(^[A-Z][a-z]+(?=\s[A-Z])(?:\s[A-Z][a-z]+)+)([\s\S]*)

Я использую его в плагине подделки каналов Drupal с функцией "найти и заменить регулярное выражение", чтобы заменить все после "Терри Смита" пустым пространством.

2 ответа

Решение

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

^(?:(?:[A-Z][a-z]+)(?>\s*))+

Regex101 Demo

Если вы хотите удалить эту часть из setnence, тогда все, что вам нужно сделать, это заменить ее пустой строкой.

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

^((?:(?:[A-Z][a-z]+)(?>\s*))+)([\s\S]+)

и использовать строку замены $1 или что-то на вашем языке, которое используется для ссылки на первую захваченную группу.

Regex101 Demo

Это найдет заглавные слова:

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

Визуализация регулярных выражений

Вы можете заменить + с * после [a-z] также сопоставлять односимвольные заглавные слова.

Чтобы получить все заглавные слова в начале строки, добавьте ^( а также )+ вокруг него:

^([A-Z][a-z]+(?=\b)\s*)+
Другие вопросы по тегам