Regex, чтобы изменить весь текст в нижний регистр, но пропустить части текста, которые начинаются и заканчиваются определенным образом - PullRequest
0 голосов
/ 16 ноября 2018

Есть ли способ изменить весь текст на строчные, кроме слов, которые начинаются с определенной комбинации букв («ABC») и заканчиваются пробелом (точки, дефис, подчеркивание могут быть внутри? Сохранять заглавные буквы в таких словах, как «ABCkjkJ.90_1» или «ABC-12_OLL», но все остальное в нижнем регистре?

Найти:

(понятия не имею)

[^ABC][\s]$ 

Заменить на:

\L$1

Кроме того, как мне удалить все знаки препинания из остального текста (не те, которые начинаются с ABC)?

1 Ответ

0 голосов
/ 16 ноября 2018

Проблема сводится к сопоставлению слов, которые не начинаются с ABC. Поскольку слова в вашей строке могут содержать точки и дефисы, которые не являются символами слова, мы, к сожалению, не можем использовать \b для определения начала слова - вместо этого соответствует предшествующему пробелу (или начало строки) с

(?: |^)

и затем отрицательный прогноз для abc, и сопоставьте как можно больше слов, точек или дефисов:

(?: |^)(?!abc)[\w.-]*

Затем строчные буквы при каждом полном совпадении.

https://regex101.com/r/QSShDu/1

Пример, для ввода:

Baz Buzz ABCkjkJ.90_1 ABC-12_OLL Foo Bar

вы получите

baz buzz ABCkjkJ.90_1 ABC-12_OLL foo bar

Если часть ABC всегда находится в начале строки, то это намного проще - просто захватить первое слово в группе, затем захватить оставшуюся часть строки в группе и использовать остальную часть строка:

([\w.-]*)(.+)

заменить на

\1\L\2

https://regex101.com/r/QSShDu/2

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