Как разбить строку на левую подстроку и правую подстроку с разделителем в качестве Unicode - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть строка с Unicode. Я хочу разбить строку на левую подстроку и правую подстроку с Юникодом в качестве разделителя.

Например, заданная строка:

str = 'Oh wow. Magnificent! Ariadna Garcia! <U+2764> <U+2764> wonderful'

Я хочу вывести как :

leftstr = 'Oh wow. Magnificent! Ariadna Garcia!'

uni_code = '<U+2764> <U+2764>'

rightstr = 'wonderful'

Я подумал об использовании регулярных выражений для идентификации Unicode, а затем нашел индекс Unicode с помощью find (). Затем используйте подход среза строки и разрезания с индексами, то есть leftstr = начальный индекс на единицу меньше, чем индекс Юникода. Затем rightstr = (начальный индекс Unicode + длина Unicode) до конца строки. Проблема в том, что мое регулярное выражение для определения Unicode не работает. Я чувствую, мой подход сложен. Есть ли какой-нибудь элегантный способ получить нужные подстроки в качестве вывода.

Следующий код, который я пробовал до сих пор:

import re str1 = 'Oh wow. Magnificent! Ariadna Garcia! <U+2764> wonderful'
pattern = r'<U\+.*?>' 
indx = str1.find(pattern) 
print(indx)

Регулярное выражение не работает должным образом.

1 Ответ

0 голосов
/ 05 февраля 2020

К сожалению, существует много смайликов, и многие из них представляют собой несколько последовательностей, поэтому общее решение c является сложным. Вот полный список Unicode:

https://unicode.org/emoji/charts-13.0/emoji-list.html

Прямое решение:

import re

s = 'Oh wow. Magnificent! Ariadna Garcia! ❤ ❤ wonderful'
left,emoji,right = re.split(r'(\u2764 \u2764)',s)
print(left,emoji,right,sep='\n')
Oh wow. Magnificent! Ariadna Garcia! 
❤ ❤
 wonderful

Вы можете разобрать эти Файлы данных Unicode для создания более сложных регулярных выражений. Например, это анализирует диапазон смайликов:

import re

s = 'One?Two?Three?Four?Five'
result = re.split(r'([\U0001F600-\U0001F64F])',s)
print(result)
['One', '?', 'Two', '?', 'Three', '?', 'Four', '?', 'Five']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...