python 中的 split 方法是否为某些字符返回了包含 \u 的内容以及如何摆脱它?
Does split method in python returned something containing \u for some characters and how to get rid of it?
我有一个 unicode 字符串:
s = "ᠤᠷᠢᠳᠤ ᠲᠠᠯᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ"
它returns的拆分方法有些改变,在第二个单词中有一个\u180e
。
>>> print(s.split())
['ᠤᠷᠢᠳᠤ', 'ᠲᠠᠯ\u180eᠠ', 'ᠶᠢᠨ', 'ᠬᠠᠪᠲᠠᠭᠠᠢ', 'ᠬᠡᠪᠲᠡᠭᠡ']
我想得到的是:
['ᠤᠷᠢᠳᠤ', 'ᠲᠠᠯᠠ ᠶᠢᠨ', 'ᠶᠢᠨ', 'ᠬᠠᠪᠲᠠᠭᠠᠢ', 'ᠬᠡᠪᠲᠡᠭᠡ']
这是什么原因造成的,如何解决?
根据维基百科:https://en.wikipedia.org/wiki/Whitespace_character#Unicode
U+180E 在 Uncode 6.3.0 之前是一个 space 字符,所以如果 python 实现了比我猜想的更早的 Unicode 规范, split() 会在所有 space 字符上中断。如果你只想拆分某些字符 (s.split(" ")
),你可以通过给 split 一个参数来解决这个问题,这会给你:
>>> s.split(" ")
['ᠤᠷᠢᠳᠤ', 'ᠲᠠᠯ\u180eᠠ\u202fᠶᠢᠨ', 'ᠬᠠᠪᠲᠠᠭᠠᠢ', 'ᠬᠡᠪᠲᠡᠭᠡ']
我认为问题不在于拆分函数,而在于列表本身。
>>> s = ["ᠤᠷᠢᠳᠤ ᠲᠠᠯᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ"]
>>> print(s)
['ᠤᠷᠢᠳᠤ ᠲᠠᠯ\u180eᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ']
您应该仍然可以正常使用列表,因为它会在使用元素时自行更正。
>>> s = "ᠤᠷᠢᠳᠤ ᠲᠠᠯᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ"
>>> s = s.split()
>>> [print(e) for e in s]
ᠤᠷᠢᠳᠤ
ᠲᠠᠯᠠ
ᠶᠢᠨ
ᠬᠠᠪᠲᠠᠭᠠᠢ
ᠬᠡᠪᠲᠡᠭᠡ
我有一个 unicode 字符串:
s = "ᠤᠷᠢᠳᠤ ᠲᠠᠯᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ"
它returns的拆分方法有些改变,在第二个单词中有一个\u180e
。
>>> print(s.split())
['ᠤᠷᠢᠳᠤ', 'ᠲᠠᠯ\u180eᠠ', 'ᠶᠢᠨ', 'ᠬᠠᠪᠲᠠᠭᠠᠢ', 'ᠬᠡᠪᠲᠡᠭᠡ']
我想得到的是:
['ᠤᠷᠢᠳᠤ', 'ᠲᠠᠯᠠ ᠶᠢᠨ', 'ᠶᠢᠨ', 'ᠬᠠᠪᠲᠠᠭᠠᠢ', 'ᠬᠡᠪᠲᠡᠭᠡ']
这是什么原因造成的,如何解决?
根据维基百科:https://en.wikipedia.org/wiki/Whitespace_character#Unicode
U+180E 在 Uncode 6.3.0 之前是一个 space 字符,所以如果 python 实现了比我猜想的更早的 Unicode 规范, split() 会在所有 space 字符上中断。如果你只想拆分某些字符 (s.split(" ")
),你可以通过给 split 一个参数来解决这个问题,这会给你:
>>> s.split(" ")
['ᠤᠷᠢᠳᠤ', 'ᠲᠠᠯ\u180eᠠ\u202fᠶᠢᠨ', 'ᠬᠠᠪᠲᠠᠭᠠᠢ', 'ᠬᠡᠪᠲᠡᠭᠡ']
我认为问题不在于拆分函数,而在于列表本身。
>>> s = ["ᠤᠷᠢᠳᠤ ᠲᠠᠯᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ"]
>>> print(s)
['ᠤᠷᠢᠳᠤ ᠲᠠᠯ\u180eᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ']
您应该仍然可以正常使用列表,因为它会在使用元素时自行更正。
>>> s = "ᠤᠷᠢᠳᠤ ᠲᠠᠯᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ"
>>> s = s.split()
>>> [print(e) for e in s]
ᠤᠷᠢᠳᠤ
ᠲᠠᠯᠠ
ᠶᠢᠨ
ᠬᠠᠪᠲᠠᠭᠠᠢ
ᠬᠡᠪᠲᠡᠭᠡ