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

У меня есть строка, с которой я хочу заменить любой символ, который неt стандартный символ или число, например (a-z или 0-9) со звездочкой. Например, "ч ^ &ell`., | o w] {+ orld " заменяется на "Привет, мир", Обратите внимание, что несколько символов, таких как «^ &» заменить одну звездочку. Как бы я поступил так?

 sds03 нояб. 2016 г., 21:23

Ответы на вопрос(4)

Решение Вопроса

Regex на помощь!

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'
 stackPusher20 окт. 2016 г., 18:31
Если вы хотите оставить пробелы в вашей строке, просто добавьте пробел в скобках: s = re.sub ('[^ 0-9a-zA-Z] + ',' * ', с)
 JHS23 дек. 2018 г., 02:32
Также обратите внимание\W для несловесных символов, это 's почти то же самое, но допускает подчеркивание как символ слова (нене знаю почему)docs.python.org/3.6/library/re.html#index-32
 Chris02 июн. 2018 г., 17:47
Если выполняется более одной замены, это будет выполняться немного быстрее, если вы предварительно скомпилируете регулярное выражение, например,import re; regex = re.compile('[^0-9a-zA-Z]+'); regex.sub('*', 'h^&ell.,|o w]{+orld')
 zhazha13 июл. 2016 г., 09:43
Если вы много работаете с юникодом, вам также может понадобиться сохранить все символы не-ASCII юникода:re.sub("[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+", " ", ":%# unicode ΣΘΙП@./\n")

использование\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 является более подходящим.

 Wiktor Stribiżew01 апр. 2019 г., 22:27
Обратите внимание, что\W эквивалентно[^a-zA-Z0-9_] только в Python 2.x. В Python 3.x\W+ эквивалентно[^a-zA-Z0-9_] только если /re.ASCIIre.A флаг используется.

Пытаться:

s = filter(str.isalnum, s)

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

 Alexey15 мар. 2018 г., 01:12
Безразлично»т работа в питоне 3

Питонический путь.

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

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

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

Ваш ответ на вопрос