Как удалить специальные символы в конце каждого слова в строке? - PullRequest
2 голосов
/ 25 августа 2010

я хочу, чтобы оно совпадало только с концом каждого слова

пример:

"i am test-ing., i am test.ing-, i am_, test_ing," 

вывод должен быть:

"i am test-ing i am test.ing i am test_ing"

1 Ответ

5 голосов
/ 25 августа 2010
>>> import re
>>> test = "i am test-ing., i am test.ing-, i am_, test_ing,"
>>> re.sub(r'([^\w\s]|_)+(?=\s|$)', '', test)
'i am test-ing i am test.ing i am test_ing'

Соответствует одному или нескольким не алфавитно-цифровым символам ([^\w\s]|_), за которыми следует либо пробел (\s), либо конец строки ($). Конструкция (?= ) является предварительным утверждением: она гарантирует, что совпадающее пространство не включено в совпадение, поэтому оно не заменяется; заменяется только [\W_]+.

Хорошо, но почему [^\w\s]|_, спросите вы? Первая часть соответствует любому, что не является буквенно-цифровым или подчеркиванием ([^\w]) или пробелом ([^\s]), то есть символами пунктуации. За исключением того, что мы хотим исключить подчеркивания, поэтому мы включаем в них те, которые |_.

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