Я пытаюсь разбить длинную строку на основе Unicode и текстовой (китайской) пунктуации. Как мне это сделать?
def split1(s):
temp1 = re.split(r"(;|:|•|。|;|:)", s)
temp = re.split(u"([\u3002|\uFF01|\uFF1F])", temp1)
i = iter(temp)
ОБНОВИТЬ: Я надеюсь разделить строку s на основе обычного текста и текста в Юникоде.
что пошло не так с приведенным выше кодом и каков ваш желаемый результат?
Может def split1(s): return re.split(ur"([\u3002\uFF01\uFF1F;:•。;:])", s)? Пожалуйста, добавьте пример и ожидаемый результат.
@Malvolio приведенный выше код вернет ошибку, потому что temp1 является классом re, а не строкой. Мой желаемый результат - дважды разбить строку s на основе двух регулярных выражений
@Akshay Nevrekar см. Комментарий выше
@ WiktorStribiżew спасибо, похоже, ваша версия работает. Имеет ли значение, является ли юникод первым в регулярном выражении?
Нет, он может быть где угодно, пока не нарушит закономерность.
@ echan00 - я имею в виду, добавьте всю эту информацию к вашему вопросу (и аналогичную информацию ко всем будущим вопросам).






Вы можете использовать
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 в строке.
А что происходит? Что должно произойти? Что ты пробовал?