2017-03-06 34 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']