Возвращает ли метод split в python что-то, содержащее \ u для некоторых символов, и как от него избавиться? - PullRequest
4 голосов
/ 03 февраля 2020

У меня есть строка в кодировке Unicode:

s = "ᠤᠷᠢᠳᠤ ᠲᠠᠯ᠎ᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ"

метод разделения, который он возвращает, несколько изменен, с \u180e во втором слове.

>>> print(s.split())
['ᠤᠷᠢᠳᠤ', 'ᠲᠠᠯ\u180eᠠ', 'ᠶᠢᠨ', 'ᠬᠠᠪᠲᠠᠭᠠᠢ', 'ᠬᠡᠪᠲᠡᠭᠡ']

Что я хочу получить:

['ᠤᠷᠢᠳᠤ', 'ᠲᠠᠯ᠎ᠠ ᠶᠢᠨ', 'ᠶᠢᠨ', 'ᠬᠠᠪᠲᠠᠭᠠᠢ', 'ᠬᠡᠪᠲᠡᠭᠡ']

В чем причина и как ее решить?

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Я не думаю, что проблема связана с функцией split, но с самим списком.

>>> s = ["ᠤᠷᠢᠳᠤ ᠲᠠᠯ᠎ᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ"]
>>> print(s)
['ᠤᠷᠢᠳᠤ ᠲᠠᠯ\u180eᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ']

Вы по-прежнему сможете нормально использовать список, потому что он исправляет себя, когда элемент б.

>>> s = "ᠤᠷᠢᠳᠤ ᠲᠠᠯ᠎ᠠ ᠶᠢᠨ ᠬᠠᠪᠲᠠᠭᠠᠢ ᠬᠡᠪᠲᠡᠭᠡ"
>>> s = s.split()
>>> [print(e) for e in s]
ᠤᠷᠢᠳᠤ
ᠲᠠᠯ᠎ᠠ
ᠶᠢᠨ
ᠬᠠᠪᠲᠠᠭᠠᠢ
ᠬᠡᠪᠲᠡᠭᠡ
1 голос
/ 03 февраля 2020

Согласно Википедии: https://en.wikipedia.org/wiki/Whitespace_character#Unicode

U + 180E является пробелом до Uncode 6.3.0, поэтому, если python реализует более раннюю Unicode spe c, чем я предполагаю split () будет разбивать все пробелы. Вы можете обойти это, задав аргумент split, если вы хотите разделить только на определенные символы (s.split(" ")), которые дадут вам:

>>> s.split(" ")
['ᠤᠷᠢᠳᠤ', 'ᠲᠠᠯ\u180eᠠ\u202fᠶᠢᠨ', 'ᠬᠠᠪᠲᠠᠭᠠᠢ', 'ᠬᠡᠪᠲᠡᠭᠡ']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...