Заменить все небуквенные символы в строке - программирование
Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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'

Ответ 2

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

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

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

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

Ответ 3

Используйте \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(r'\W+', '*', s)
output: 'h*ell*o*w*orld'

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

Ответ 4

Пытаться:

s = filter(str.isalnum, s)

в Python3:

s = ''.join(filter(str.isalnum, s))

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

Ответ 5

if(passCode[1]== ' '){
 passCode[1]='_';
 };
 if(passCode[0]== ' '){
 passCode[0]='_';
 };