Регулярное выражение: установить вместе отдельные символы, пока они буквы - PullRequest
0 голосов
/ 17 января 2020

Рассмотрим следующие примеры:

Original                       Regex
A-B-C SCHOOL INSTITUTION   --> ABC SCHOOL INSTITUTION
A B C SCHOOL INSTITUTION   --> ABC SCHOOL INSTITUTION

Цель состоит в том, чтобы объединить отдельные буквы, когда они разделены дефисами или пробелами. Я использовал следующий шаблон:

(?<!\w\w)(?:\s+|-)(?!\w\w)

Однако у меня есть проблема не применять одно и то же правило к числам, и, поскольку \ w включает числа, возникает проблема. Например, следующее не допускается и должно оставаться разделенным таким, как оно есть:

Original                   Regex                    Desired
A 5 M SCHOOL CORPORATION   A5M SCHOOL CORPORATION   A 5 M SCHOOL CORPORATION

Спасибо

1 Ответ

2 голосов
/ 17 января 2020

Прежде всего это (?:\s+|-) может быть сокращено до [\s-]+ или [ -]+. Во-вторых, вам нужен белый список, а не черный.

Это означает, что вы не ищете (?!\w\w). Вместо этого вы ищете (?=\w\b) или, в частности, (?=[a-zA-Z]\b) в этом случае.

Наконец, вы не хотите, чтобы цифры совпадали. Поэтому вам необходимо исключить их перед сопоставлением с любым [ -]: (?<!\d)[ -]+.

Собирая все это вместе:

re.sub(r'(?<!\d)[ -]+(?=[a-zA-Z]\b)', '', str)

См. живую демонстрацию здесь

...