Заменить все не буквенно-цифровые символы в строке


У меня есть строка, с которой я хочу заменить любой символ, который не является стандартным символом или числом, таким как (a-z или 0-9) со звездочкой. Например, " h^&ell`.,|о Вт]{+Ире" заменяется на "ч*елл*о*ж*мира". Обратите внимание, что несколько символов, таких как "^&" заменяются одной звездочкой. Как бы я это сделал?

4 63

4 ответа:

регулярное выражение на помощь!

import re

s = re.sub('[^0-9a-zA-Z]+', '*', s)

пример:

>>> re.sub('[^0-9a-zA-Z]+', '*', 'h^&ell`.,|o w]{+orld')
'h*ell*o*w*orld'

в подходящие для Python путь.

print "".join([ c if c.isalnum() else "*" for c in s ])

Это не имеет дело с группировкой нескольких последовательных несовпадающих символов, хотя, т. е.

"h^&i => "h**i не "h*i" как в регулярных выражениях решений.

попробуй:

s = filter(str.isalnum, s)

изменить: понял, что ОП хочет заменить не с символов '*'. Мой ответ не подходит

использовать \W что эквивалентно [^a-zA-Z0-9_]. Проверьте документацию,https://docs.python.org/2/library/re.html

Import re
s =  'h^&ell`.,|o w]{+orld'
replaced_string = re.sub('\W+', '*', s)
output: 'h*ell*o*w*orld'

обновление: это решение также исключит подчеркивание. Если вы хотите исключить только алфавиты и цифры, то решение nneonneo более подходит.