문자와 숫자 만 가질 수 있도록 문자열에서 모든 특수 문자, 문장 부호 및 공백을 제거해야합니다.
답변
이것은 정규 표현식없이 수행 할 수 있습니다 :
>>> string = "Special $#! characters spaces 888323"
>>> ''.join(e for e in string if e.isalnum())
'Specialcharactersspaces888323'
당신은 사용할 수 있습니다 str.isalnum
:
S.isalnum() -> bool Return True if all characters in S are alphanumeric and there is at least one character in S, False otherwise.
정규식 사용을 고집하면 다른 해결책이 좋습니다. 그러나 정규 표현식을 사용하지 않고 수행 할 수 있다면 가장 좋은 방법입니다.
답변
문자 나 숫자가 아닌 문자열과 일치하는 정규식은 다음과 같습니다.
[^A-Za-z0-9]+
정규식 대체를 수행하는 Python 명령은 다음과 같습니다.
re.sub('[^A-Za-z0-9]+', '', mystring)
답변
더 짧은 방법 :
import re
cleanString = re.sub('\W+','', string )
단어와 숫자 사이에 공백을 원하면 ”를 ‘
답변
이것을 본 후, 나는 가장 적은 시간에 실행되는 것을 찾아서 제공된 답변을 확장하는 데 관심이 있었으므로 제안 된 답변 중 일부를 timeit
두 개의 예제 문자열 과 비교 하여 확인했습니다 .
string1 = 'Special $#! characters spaces 888323'
string2 = 'how much for the maple syrup? $20.99? That s ricidulous!!!'
실시 예 1
'.join(e for e in string if e.isalnum())
string1
-결과 : 10.7061979771string2
-결과 : 7.78372597694
실시 예 2
import re
re.sub('[^A-Za-z0-9]+', '', string)
string1
-결과 : 7.10785102844string2
-결과 : 4.12814903259
실시 예 3
import re
re.sub('\W+','', string)
string1
-결과 : 3.11899876595string2
-결과 : 2.78014397621
위의 결과는 평균에서 다음과 같이 가장 낮은 결과를 얻었습니다 repeat(3, 2000000)
예 3 은 예 1 보다 3 배 더 빠를 수 있습니다 .
답변
파이썬 2. *
난 그냥 filter(str.isalnum, string)
작동 생각
In [20]: filter(str.isalnum, 'string with special chars like !,#$% etcs.')
Out[20]: 'stringwithspecialcharslikeetcs'
파이썬 3. *
Python3에서 filter( )
함수는 위와 달리 문자열 대신 반복 가능한 객체를 반환합니다. itertable에서 문자열을 얻으려면 다시 결합해야합니다.
''.join(filter(str.isalnum, string))
또는 list
결합 사용 에 전달 하기 ( 확실하지 않지만 조금 빠를 수 있음 )
''.join([*filter(str.isalnum, string)])
참고 : Python> = 3.5 에서 [*args]
유효한 포장 풀기
답변
#!/usr/bin/python
import re
strs = "how much for the maple syrup? $20.99? That's ricidulous!!!"
print strs
nstr = re.sub(r'[?|$|.|!]',r'',strs)
print nstr
nestr = re.sub(r'[^a-zA-Z0-9 ]',r'',nstr)
print nestr
더 많은 특수 문자를 추가 할 수 있으며 ”로 대체됩니다. 즉, 제거되지 않습니다.
답변
다른 사람들이 정규식을 사용하는 것과 달리, 내가 원하지 않는 것을 명시 적으로 열거하는 대신 내가 원하지 않는 모든 문자를 제외하려고합니다 .
예를 들어 ‘a에서 z’까지의 문자 (대문자 및 소문자)와 숫자 만 원하면 다른 모든 것을 제외합니다.
import re
s = re.sub(r"[^a-zA-Z0-9]","",s)
이것은 “숫자가 아닌 모든 문자 또는 빈 문자열로 ‘a ~ z’또는 ‘A ~ Z’범위의 문자를 대체합니다”를 의미합니다.
실제로 ^
정규 표현식의 첫 번째 위치에 특수 문자를 삽입 하면 부정이 발생합니다.
추가 팁 : 결과 를 소문자 로 사용해야하는 경우 대문자를 찾지 않는 한 정규식을 더 빠르고 쉽게 만들 수 있습니다.
import re
s = re.sub(r"[^a-z0-9]","",s.lower())