[python] 문자열에서 영숫자가 아닌 모든 문자 교체

(az 또는 0-9)와 같은 표준 문자 나 숫자가 아닌 문자를 별표로 바꾸려는 문자열이 있습니다. 예를 들어, “h ^ & ell`., | ow] {+ orld”는 “h * ell * o * w * orld”로 대체됩니다. “^ &”와 같은 여러 문자는 하나의 별표로 대체됩니다. 어떻게하면 되나요?



답변

구조에 정규식!

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'


답변

비단뱀적인 방법.

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

이것은 일치하지 않는 여러 연속 문자를 그룹화하는 것을 다루지 않습니다.

"h^&i => "h**i하지 "h*i"정규식 솔루션으로.


답변

시험:

s = filter(str.isalnum, s)

Python3에서 :

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

편집 : OP가 문자가 아닌 문자를 ‘*’로 바꾸고 싶다는 것을 깨달았습니다. 내 대답이 맞지 않아


답변

사용 \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의 솔루션이 더 적합합니다.


답변