我上一个Python语法分析器使用层和我在的形式来解析输入:厚度:非法字符“+”
VAR VAR1 001
+000 000 000 000
当代码将创建一个名为VAR 1变量然后分配值0到它
我写的instanciation的正则表达式是:
t_INST = r'[\+|-]0[ ][0-9][0-9][0-9][ ][0-9][0-9][0-9][ ][0-9][0-9][0-9][ ][0-9][0-9][0-9]'
但是我运行程序时,厚度打印以下内容:
Illegal character '+'
再现器如下:
import ply.lex as lex
tokens = ['INST']
t_INST = r'[+-]0[ ](\d{3}[ ]){3}\d{3}';
t_ignore = ' \t'
def t_error(t):
print("Illegal character '%s'" % t.value[0])
t.lexer.skip(1)
lexer = lex.lex()
def parse(input_string):
ret = []
lexer.input (input_string)
while True:
tok = lexer.token()
if not tok:
break # No more input
ret.append((tok.type, tok.value))
return ret
print parse("+0 000 000 000")
应使用\ d来表示字符,还可以使用{}表示的重复序列:\ + - ](:\ d {3} \ S? ){4} – Neil
为什么反斜杠?你希望在正常情况下使用它,但是它在字符类中没有意义。实际上,除非'|'是一个有效的第一个字符,否则你可能需要'[+ - ]',而不是'[+ | - ]'。 –
顺便说一句,将你的再现器 - 尽可能保留为*最小*将被扩展到它的*完整*和*可验证*的位置,如http://stackoverflow.com/中所给出的那样。帮助/ MCVE。现在,有人需要做一些相当的工作来重现错误。 –