Как удалить менее 2 точек в регулярном выражении? - PullRequest
0 голосов
/ 16 апреля 2019

Моя проблема заключается в следующем:

У меня есть строки, в которых я хочу удалить точки меньше 2 в строке.Если оно больше 2, оно должно остаться.

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

Код, который я использую

re.sub('\.{,2}', '', 'Hello.... I am shy.')

Результат, который я хочу:

Hello.... I am shy

Результат, который я получаю:

Hello I am shy

Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Раствор

re.sub('(?<!\.)\.{,2}(?!\.)', '', 'Hello.... I am shy.')

Проблема в том, что мне пришлось проверить, начинается ли совпадение с точки или с точки.

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

?<!

и

?!

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

П.С .: Я понял, что у Виктора было то же самое решение, но он не дал должного объяснения.

0 голосов
/ 16 апреля 2019

Вы должны убедиться, что все, что идет после ваших 0, 1 или 2 точек, не является точкой, поэтому вам нужно регулярное выражение, подобное этому

re.sub('\.{0,2}([^.]|$)', '$1', 'Hello.... I am shy.')

Это будет искать 0, 1 или 2 точки, за которыми следует символ, который не является точкой или за концом строки.

EDIT: Предыдущая версия разделила персонажа после точек.

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