2017-03-06 3 views
-1

ich diesen Code ausprobieren in [PyPy 5.1.2 mit GCC 5.3.1 20160413]PyPy Unicode Split String

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'] 

Ich möchte das gemischte String aufgeteilt werden, dieses zu erhalten.

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

Das erneute Modul erzeugt ein unerwartetes Ergebnis.

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

Fragen:

Hat Python eine Split mehr Trennzeichen-Funktion?

+0

Versuchen Sie nicht, auf UTF-8 Bytes zu teilen; Sie sollten besser in ein Unicode-String-Objekt * zuerst * dekodieren. 're.split (ur '[' i] ', mixed.decode (' utf8 '))'. Andernfalls wird durch Setzen von 'い' in eine '[..]' - Zeichenfolge die Regex auf jedes der 3 Bytes aufgeteilt, die diesen Codepunkt codieren. –

+0

Die Alternative besteht darin, auf einzelne Bytefolgen zu splitten: 're.split (r '(?: い | i)', gemischt)' (also entweder auf die drei UTF-8 Bytes von 'い', * oder * aufteilen das einzelne Byte für "i"). –

Antwort

0

Funktioniert für mich beide mit Python und Pypy.

import re 

mixed = "あえいおうaeiou" 

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