Использование 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]