python - модуль Re, оставляющий место для совпадающей строки - PullRequest
0 голосов
/ 09 апреля 2019

Я использую модуль re в Python, чтобы удалить вхождение определенной строки. Вот то, что я пытаюсь:

>>> import re
>>> t = re.sub(re.compile('ab'), "", 'This is a ab text')
>>> t
'This is a  text'

Обратите внимание, что вместо того, чтобы заменить 'ab' на '' (ничто), он заменяется пробелом. Может кто-нибудь подсказать, в чем тут проблема?

1 Ответ

5 голосов
/ 09 апреля 2019

Фактически замена - это пустая строка, но поскольку ab окружен пробелами с обеих сторон, кажется, что в замене есть пробел. Попробуйте эту версию:

t = re.sub(r'\s*ab\s*', " ", 'This is a ab text')
print(t)

This is a text

Приведенный выше шаблон \s*ab\s* соответствует и потребляет ab вместе с любыми окружающими пробелами, а затем заменяет только один пробел.

Для крайнего случая, когда ab может быть самым первым или последним словом в строке, я рекомендую использовать strip(), например,

t = re.sub(r'\s*ab\s*', " ", 'ab tests can be so boring ab').strip()
print(t)

tests can be so boring
...