파이썬에서 공백으로 문자열을 분할하려면 모든 공백 문자에 의해 분할 문자열, 하나는 일반적으로 매개 변수없이 문자열의 split
방법을 사용파이썬 :
>>> 'a\tb c\nd'.split()
['a', 'b', 'c', 'd']
그러나 어제 나는대로 단어 사이에 ZERO WIDTH SPACE을 사용하는 문자열을 가로 질러 잘. (자바 스크립트 사람들 사이에서) 짧은 black magic 성능에 내 새로운 지식을 설정하는 데, 나는 split
이 충분하지 않기 때문에, 모든 whitespace characters에 의해 더 나은 분할하는 방법을 부탁드립니다 :
>>> u'a\u200bc d'.split()
[u'a\u200bc', u'd']
UPD1
sth
에 의해 제안 된 솔루션은 일반 적으로 작동하지만 일부 OS 설정 또는 Python 컴파일 옵션에 의존합니다. 확실한 이유를 알고 있으면 좋을 것입니다 (Windows에서 설정을 전환 할 수있는 경우).
그래서 나는이 문제에 대해 유니 코드 기술위원회에 연락하고 신속하게 다시 응답을 받았습니다받은 : UPD2cptphil
분명 모든 것을 만드는 큰 link을 발견했다.
가 ZS에서 U + 200B 제로 폭 공간을 변경 : 그들은 ZWSP 공백으로 간주 한 번에 한 번했지만 그 unicode site에서 유니 코드 4.0.1
인용문에서 변경되었음을 지적 Cf (2003.10.27)
U + 200B Zero Width Space (ZWSP) 사용에 대한 지속적인 문제가있었습니다. 이 문자의 기능은 일반적으로 허용되지 않는 위치에서 줄 바꿈을 허용하는 것이므로 기능적으로 일반 범주가 Cf 인 형식 문자입니다. 이 동작은 유니 코드 표준에 잘 설명되어 있으며 문자는 유니 코드 문자 데이터베이스에서 공백 문자로 간주되지 않습니다. 그러나 역사적인 이유로 일반 카테고리는 여전히 Zs (Space Separator)이며, 문자가 오용 될 수 있습니다. ZWSP는 공백이 아닌 유일한 Z 문자이기도합니다. 일반 카테고리는 규칙의 오역을 야기 할 수 있습니다. D13 기본 문자는 ZWSP가 마크 결합의 기준으로 허용하는 것으로 간주합니다.
U + 200B의 일반 카테고리를 Zs에서 Cf로 변경하는 것이 좋습니다.
해상도 : 종료. U + 200B의 일반 범주는 유니 코드 버전 4.0.1에서 Zs에서 Cf로 변경됩니다.
그런 다음 변경 사항이 Python에 반영되었습니다. Python 2.5.4와 2.6.5에서 u'\u200B'.isspace()
의 결과는 True
이고, Python 2.7.1에서는 이미 False
입니다.
>>> u'a\u200Ac'.split()
[u'a', u'c']
그리고 당신을 위해 충분하지 않은 경우 아래에 제시 한 Gabi Purcaru
로에 의해 문자 하나를 추가 split
일반 다른 공백 문자가 들어
은 충분하다.
'u'a \ u200bc 디부 .split()'리턴'[u'a ', u'c'를 u'd ' ]'. 이것은 우분투에서 파이썬 2.6.5를 사용하고 있습니다. – NPE
@aix : 여기에'[u'a \ u200bc, u'd ']'(아치 리눅스의 Python 2.7.2)를 반환합니다. 미국 로케일. –
@aix, hmm, interesting! – newtover