Unicode re.sub () не работает с \ g <0> (группа 0)

Почему \g<0> работает с регулярным выражением unicode?

Когда я пытался использовать \g<0> для вставки пробела до и после группы с обычным регулярным выражением, он работает:

 >>> punct = """,.:;!@#$%^&*(){}{}|\/?><"'""" >>> rx = re.compile('[%s]' % re.escape(punct)) >>> text = '''"anständig"''' >>> rx.sub(r" \g<0> ",text) ' " anst\xc3\xa4ndig " ' >>> print rx.sub(r" \g<0> ",text) " anständig " 

но с регулярным выражением unicode, пространство не добавляется:

 >>> punct = u""",–−—''‚”“‟„!£"%$'&)(+*-€/.±°´·¸;:=<?>@§#¡•[˚]»_^`≤…\«¿¨{}|""" >>> rx = re.compile("["+"".join(punct)+"]", re.UNICODE) >>> text = """„anständig“""" >>> rx.sub(ur" \g<0> ", text) '\xe2\x80\x9eanst\xc3\xa4ndig\xe2\x80\x9c' >>> print rx.sub(ur" \g<0> ", text) „anständig“ 
  1. Как я могу заставить \g работать в регулярном выражении unicode?
  2. Если (1) невозможно, как мне получить регулярное выражение unicode, введите пробел до и после символа в punct ?

One Solution collect form web for “Unicode re.sub () не работает с \ g <0> (группа 0)”

Я думаю, у вас две ошибки. Во-первых, вы не re.escape как в первом примере с re.escape и у вас есть такие символы, как [] которые должны быть экранированы. Во-вторых, text переменная не является unicode. Пример, который работает:

 >>> punct = re.escape(u""",–−—''‚”“‟„!£"%$'&)(+*-€/.±°´·¸;:=<?>@§#¡•[˚]»_^`≤…\«¿¨{}|""") >>> rx = re.compile("["+"".join(punct)+"]", re.UNICODE) >>> text = u"""„anständig“""" >>> print rx.sub(ur" \g<0> ", text) „ anständig “ 
  • Python "\ x00" заполняется / utf-32 строка из cStringIO
  • Unicode арабская строка пользователю
  • Является ли u'string 'таким же, как' string'.decode ('XXX')
  • Как выявить свойство числового значения Unicodes
  • Python: Unicode и ElementTree.parse
  • Ошибка Python os.walk и japanese filename
  • Hack Jinja2 для кодирования с `utf-8` вместо` ascii`?
  • Байты в строке юникода Python
  • Python - лучший язык программирования в мире.