developer tip

유니 코드를 사용한 Python 및 정규식

copycodes 2020. 10. 7. 07:47
반응형

유니 코드를 사용한 Python 및 정규식


문자열 'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ'에서 일부 유니 코드 기호를 삭제해야합니다.

나는 그들이 여기에 확실히 존재한다는 것을 압니다. 나는 시도했다 :

re.sub('([\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+)', '', 'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ')

하지만 작동하지 않습니다. 문자열은 동일하게 유지됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?


Python 2.x 또는 3.0을 사용하고 있습니까?

2.x를 사용하는 경우 정규식 문자열을 'u'로 유니 코드 이스케이프 문자열로 만들어보십시오. 정규식이므로 정규식 문자열을 'r'로 원시 문자열로 만드는 것이 좋습니다. 또한 전체 패턴을 괄호로 묶는 것은 불필요합니다.

re.sub(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', '', ...)

http://docs.python.org/tutorial/introduction.html#unicode-strings

편집하다:

유니 코드 정규 표현식에 re.UNICODE / re.U / (? u) 플래그를 사용하는 것도 좋은 방법이지만 \ w 또는 \ b와 같은 문자 클래스 별칭에만 영향을 미치며이 패턴은 아무 것도 사용하지 않으므로 영향을받습니다.


유니 코드 문자열을 사용하십시오 . re.UNICODE 플래그를 사용하십시오 .

>>> myre = re.compile(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', 
                      re.UNICODE)
>>> myre
<_sre.SRE_Pattern object at 0xb20b378>
>>> mystr = u'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ'
>>> result = myre.sub('', mystr)
>>> len(mystr), len(result)
(38, 22)
>>> print result
بسم الله الرحمن الرحيم

에 의해 기사 읽기 Spolsky 조엘이 라는 긍정적 유니 코드와 문자 집합에 대해 알고 있어야합니다, 물론 절대 최소 모든 소프트웨어 개발자 (변명!)

참고 URL : https://stackoverflow.com/questions/393843/python-and-regular-expression-with-unicode

반응형