Использование ply.lex в строковом списке объектов json

У меня есть строковый список Python объектов JSON, которые я частично лексировал.

но у меня остались токены, такие как "u'Grimsby" или "u'Amsterdam", и я изо всех сил стараюсь избавиться от предшествующих вам u, не повреждая токены слов, которые фактически должны начинаться с "u".

так что я надеялся, что кто-нибудь поможет мне написать

 t_ignore 

или

def t_u(token):

что безопасно избавится от этих "ты"

Спасибо за вашу помощь.

1 ответ

Вы не всегда сможете безопасно конвертировать юникод в строку, если есть, например, символы не ascii str(u'ü') поднимет:

UnicodeEncodeError: кодек 'ascii' не может кодировать символ u'\xfc' в позиции 0:
порядковый номер вне диапазона (128)

но вы можете lex это следующим образом и сохранить u:

def t_unicode(token):
    r'u\'[^\']*\'|u\"[^"]*\"'

Примечание: когда вы print u'ü' это только отображает ü (так что ты не проблема).

,

В зависимости от контекста, если вы действительно хотите, вы можете игнорировать u (но так как это все еще будет строка в юникоде, это кажется немного бессмысленным):

from __future__ import unicode_literals

def t_u(token):
    r'u'

И тогда в твоем сгибе игнорируй u (при условии, string уже определено):

def p_unicode_string(p):
    'expression : u string'
    p[0] = p[2]
Другие вопросы по тегам