Python 문자열에서 알파벳이 아닌 문자를 모두 제거합니다.
저는 파이썬 맵리듀스 워드카운트 프로그램을 작성하고 있습니다.문제는 데이터에 알파벳이 아닌 문자가 많이 흩어져 있다는 것입니다. 저는 post를 찾았습니다. pathon의 문자열에서 영숫자를 제외한 모든 것을 제거하는 것은 regex를 사용하여 멋진 솔루션을 보여주지만 어떻게 구현해야 할지 잘 모르겠습니다.
def mapfn(k, v):
print v
import re, string
pattern = re.compile('[\W_]+')
v = pattern.match(v)
print v
for w in v.split():
yield w, 1
죄송하지만 저는 도서관을 어떻게 이용하는지 잘 모르겠습니다.re
아니면 그 문제에 대해서는 레지렉스라도 할 겁니다.들어오는 문자열(책의 줄)에 regex 패턴을 적용하는 방법을 잘 모르겠습니다.v
영숫자가 아닌 문자 없이 새 줄을 올바르게 검색합니다.
제안?
쓰임
import re
regex = re.compile('[^a-zA-Z]')
#First parameter is the replacement, second parameter is your input string
regex.sub('', 'ab3d*E')
#Out: 'abdE'
또는 특정 문자 집합만 제거하려는 경우(사후어로 입력해도 괜찮음...)
regex = re.compile('[,\.!?]') #etc.
regex를 사용하지 않는 것을 선호한다면, 당신은 시도해 볼 수 있습니다.
''.join([i for i in s if i.isalpha()])
시도:
s = ''.join(filter(str.isalnum, s))
이렇게 하면 문자열에서 모든 문자가 제거되고 영숫자 문자만 유지되며 문자열에서 다시 문자열이 생성됩니다.
re.sub() 함수를 사용하여 다음 문자를 제거할 수 있습니다.
>>> import re
>>> re.sub("[^a-zA-Z]+", "", "ABC12abc345def")
'ABCabcdef'
re.sub(일치 패턴, 문자열 바꾸기, 문자열을 검색할 문자열)
"[^a-zA-Z]+"
- a-zA-z가 아닌 문자 그룹을 찾습니다.""
- 일치하는 문자를 ""로 바꿉니다.
가장 빠른 방법은 regex 입니다.
#Try with regex first
t0 = timeit.timeit("""
s = r2.sub('', st)
""", setup = """
import re
r2 = re.compile(r'[^a-zA-Z0-9]', re.MULTILINE)
st = 'abcdefghijklmnopqrstuvwxyz123456789!@#$%^&*()-=_+'
""", number = 1000000)
print(t0)
#Try with join method on filter
t0 = timeit.timeit("""
s = ''.join(filter(str.isalnum, st))
""", setup = """
st = 'abcdefghijklmnopqrstuvwxyz123456789!@#$%^&*()-=_+'
""",
number = 1000000)
print(t0)
#Try with only join
t0 = timeit.timeit("""
s = ''.join(c for c in st if c.isalnum())
""", setup = """
st = 'abcdefghijklmnopqrstuvwxyz123456789!@#$%^&*()-=_+'
""", number = 1000000)
print(t0)
2.6002226710006653 Method 1 Regex
5.739747313000407 Method 2 Filter + Join
6.540099570000166 Method 3 Join
특정 유니코드 속성 클래스와 일치시킬 계획이라면 PyPi 모듈을 사용하는 것이 좋습니다.또한 이 라이브러리는 특히 대용량 텍스트를 처리하는 데 있어 더 안정적인 것으로 입증되었으며 다양한 Python 버전에서 일관된 결과를 제공합니다.당신은 그것을 최신 상태로 유지하기만 하면 됩니다.
설치하는 경우(사용)pip install regex
아니면pip3 install regex
), 를 사용할 수 있습니다.
import regex
print ( regex.sub(r'\P{L}+', '', 'ABCŁąć1-2!Абв3§4“5def”') )
// => ABCŁąćАбвdef
유니코드 문자를 제외한 1개 이상의 문자의 모든 청크를 제거합니다.text
. 온라인 Python 데모를 봅니다.사용할 수도 있습니다."".join(regex.findall(r'\p{L}+', 'ABCŁąć1-2!Абв3§4“5def”'))
같은 결과를 얻을 수 있습니다.
파이썬에서re
, 유니코드 문자와 일치하기 위해서, 사람은[^\W\d_]
construct (어떤 유니코드 문자라도 일치합니까?).
따라서 문자가 아닌 모든 문자를 제거하려면 모든 문자를 일치시키고 결과에 참여할 수 있습니다.
result = "".join(re.findall(r'[^\W\d_]', text))
또는 다음 문자와 일치하는 문자를 모두 제거합니다.[\W\d_]
패턴(에 opposite)[^\W\d_]
):
result = re.sub(r'[\W\d_]+', '', text)
regex 데모를 온라인으로 확인합니다.그러나 유니코드 표준이 진화하고 있고 문자 집합이 다음과 일치하기 때문에 다양한 파이썬 버전에서 일관되지 않은 결과를 얻을 수 있습니다.\w
Python 버전에 따라 달라집니다. PyPi regex
일관된 결과를 얻기 위해서는 라이브러리를 적극 권장합니다.
간단한 영어가 아닌 모든 것을 제거하는 호출 가능한 또 다른 기능이 있습니다.
import re
remove_non_english = lambda s: re.sub(r'[^a-zA-Z\s\n\.]', ' ', s)
용도:
remove_non_english('a€bñcá`` something. 2323')
> 'a b c something '
언급URL : https://stackoverflow.com/questions/22520932/python-remove-all-non-alphabet-chars-from-string
'programing' 카테고리의 다른 글
새 Spring 세션을 추가할 때 cookie-value 오류 발생 (0) | 2023.09.27 |
---|---|
XML에서 Elements(요소) 또는 Attribute를 사용해야 합니까? (0) | 2023.09.27 |
Chrome에서 Ajax 동기화 요청 실패 (0) | 2023.09.27 |
다중 삽입 쿼리를 준비할 때 오류가 발생했습니다. (0) | 2023.09.27 |
산술 연산의 왼쪽과 오른쪽은 'any', 'number' 또는 열거형이어야 합니다. (0) | 2023.09.27 |