Разделение строки python с использованием re на юникод и текст

Я пытаюсь разбить длинную строку на основе Unicode и текстовой (китайской) пунктуации. Как мне это сделать?

def split1(s):
    temp1 = re.split(r"(;|:|•|。|;|:)", s)
    temp = re.split(u"([\u3002|\uFF01|\uFF1F])", temp1)
    i = iter(temp)

ОБНОВИТЬ: Я надеюсь разделить строку s на основе обычного текста и текста в Юникоде.

А что происходит? Что должно произойти? Что ты пробовал?

Malvolio 16.10.2018 07:32

что пошло не так с приведенным выше кодом и каков ваш желаемый результат?

Sociopath 16.10.2018 07:33

Может def split1(s): return re.split(ur"([\u3002\uFF01\uFF1F;:•。;:])", s)? Пожалуйста, добавьте пример и ожидаемый результат.

Wiktor Stribiżew 16.10.2018 08:55

@Malvolio приведенный выше код вернет ошибку, потому что temp1 является классом re, а не строкой. Мой желаемый результат - дважды разбить строку s на основе двух регулярных выражений

echan00 16.10.2018 17:02

@Akshay Nevrekar см. Комментарий выше

echan00 16.10.2018 17:03

@ WiktorStribiżew спасибо, похоже, ваша версия работает. Имеет ли значение, является ли юникод первым в регулярном выражении?

echan00 16.10.2018 17:51

Нет, он может быть где угодно, пока не нарушит закономерность.

Wiktor Stribiżew 16.10.2018 17:52

@ echan00 - я имею в виду, добавьте всю эту информацию к вашему вопросу (и аналогичную информацию ко всем будущим вопросам).

Malvolio 17.10.2018 19:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
8
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать

def split1(s): 
    return re.split(ur"([\u3002\uFF01\uFF1F;:•。;:])", s)

Нет смысла разделять два шаблона, поскольку единственная цель их использования - разметить строку на символы, которые соответствуют регулярному выражению, и те, которые не соответствуют.

Захваченные тексты также станут частью результирующего списка, поскольку весь шаблон заключен в группу захвата, см. re.split документы:

If capturing parentheses are used in pattern, then the text of all groups in the pattern are also returned as part of the resulting list

Обратите внимание на префикс u, он укажет Python 2.x правильно обрабатывать единицы кода Unicode в строке.

Другие вопросы по теме