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