在字符串化的json对象列表上使用ply.lex

时间:2012-10-26 23:16:19

标签: python-2.7 ply

我有一个json对象的字符串化python列表,我有部分lexed。

但是我留下了诸如“u'Grimsby”或“u'Amsterdam”之类的令牌,我正在努力摆脱前面的u而不破坏实际上应该以“你”开头的单词标记。

所以我希望有人可以帮我写一个

 t_ignore 

def t_u(token):

将安全地摆脱这些“你”

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果存在非ascii字符,您将无法始终将unicode安全地转换为字符串,例如str(u'ü')将会引发:

  

UnicodeEncodeError:'ascii'编解码器无法对位置0中的字符u'\ xfc'进行编码:
   序数不在范围内(128)

但您可以按照以下方式使用它并保留u

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

注意:当您print u'ü'时,它只显示ü(所以你不是问题)。

根据上下文,如果你真的想要,你可以忽略u (但因为它仍然是一个unicode字符串,这似乎有点无意义)

from __future__ import unicode_literals

def t_u(token):
    r'u'

然后在你的ply中忽略u(假设string已定义):

def p_unicode_string(p):
    'expression : u string'
    p[0] = p[2]