2017-03-06 49 views
-1

我嘗試這種代碼[PyPy 5.1.2與5.3.1 GCC 20160413]Pypy的Unicode字符串分割

hiragana = "あえいおう" 
regular = "aeiou" 
mixed = "あえいおうaeiou" 

print hiragana.split("い") 
# ['\xe3\x81\x82\xe3\x81\x88', '\xe3\x81\x8a\xe3\x81\x86'] 
print regular.split("i") 
# ['ae', 'ou'] 

我要拆分的混合串得到這個。

# [ "\xe3\x81\x82\xe3\x81\x88", "\xe3\x81\x8a\xe3\x81\x86ae", "ou"] 

re模塊會產生意外的結果。

print re.split("[いi]", mixed) 
# ['', '', '\x82', '', '\x88', '', '', '', '', '\x8a', '', '\x86ae', 'ou'] 

問題:

巨蟒是否有使用多個分隔符的功能分裂?

+0

不要試圖在UTF-8字節上分割;你最好解碼爲unicode字符串對象* first *。 're.split(ur'[いi]',mixed.decode('utf8'))'。否則,將'い'放入'[..]'字符序列中告訴正則表達式在對該碼點進行編碼的3個字節中的任何一個上進行分割。 –

+0

另一種方法是在單獨的字節序列上進行分割:'re.split(r'(?:い| i)',mixed)'(這樣可以在'い',*或*的三個UTF-8字節上分割'i'的單個字節)。 –

回答

0

適用於我與蟒蛇和pypy。

import re 

mixed = "あえいおうaeiou" 

print re.split(r'い|i', mixed) 
# ['\xe3\x81\x82\xe3\x81\x88', '\xe3\x81\x8a\xe3\x81\x86ae', 'ou']