я хочу это соответствовать только конец каждого словакак удалить специальные символы из конца каждого слова в строке?
пример:
"i am test-ing., i am test.ing-, i am_, test_ing,"
вывод должен быть:
"i am test-ing i am test.ing i am test_ing"
я хочу это соответствовать только конец каждого словакак удалить специальные символы из конца каждого слова в строке?
пример:
"i am test-ing., i am test.ing-, i am_, test_ing,"
вывод должен быть:
"i am test-ing i am test.ing i am test_ing"
>>> 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
), либо конец строки ($
). Конструкция (?=)
- это утверждение lookahead: оно гарантирует, что совпадающее пространство не будет включено в совпадение, поэтому оно не будет заменено; заменяется только [\W_]+
.
Хорошо, но почему [^\w\s]|_
, спросите вы? Первая часть соответствует любому, что не является буквенно-цифровым или подчеркиванием ([^\w]
) или пробелом ([^\s]
), то есть символами пунктуации. Кроме того, мы хотим исключить символы подчеркивания, поэтому мы включаем их с |_
.
John: спасибо за ответ, я хотел бы знать, в чем разница между $ и \ Z? – killown
-1 Обычно (без MULTILINE) есть * * разность; '$' perlishly соответствует концу входной строки ИЛИ NEWLINE В КОНЕЦ СТРОКИ. '\ Z' соответствует только в конце строки, что обычно является желаемым поведением. –
точнее: «ИЛИ непосредственно перед NEWLINE AT ...» –