У меня есть строка, в которой я хочу заменить любой символ, не являющийся стандартным символом или числом, например (az или 0-9), на звездочку. Например, «h ^ & ell`., | Ow] {+ orld» заменяется на «h * ell * o * w * orld». Обратите внимание, что несколько символов, таких как «^ &», заменяются одной звездочкой. Как бы я это сделал?
100
Ответы:
Regex спешит на помощь!
Пример:
источник
re.sub("[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+", " ", ":%# unicode ΣΘΙП@./\n")
import re; regex = re.compile('[^0-9a-zA-Z]+'); regex.sub('*', 'h^&ell.,|o w]{+orld')
\W
на символы, не являющиеся словами, это почти то же самое, но допускает подчеркивание как символ слова (не знаю почему): docs.python.org/3.6/library/re.html#index-32Питонический путь.
Однако это не касается группировки нескольких последовательных несовпадающих символов, т.е.
"h^&i => "h**i
не"h*i"
как в решениях с регулярными выражениями.источник
Пытаться:
в Python3:
Изменить: понял, что OP хочет заменить не-символы на '*'. Мой ответ не подходит
источник
Использование,
\W
эквивалентное[^a-zA-Z0-9_]
. Проверьте документацию https://docs.python.org/2/library/re.htmlupdate: это решение также исключает подчеркивание. Если вы хотите исключить только буквы и цифры, то решение от nneonneo будет более подходящим.
источник
\W
это эквивалентно[^a-zA-Z0-9_]
только в Python 2.x. В Python 3.x\W+
эквивалентно[^a-zA-Z0-9_]
только при использованииre.ASCII
/re.A
flag.