我上一個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。現在,有人需要做一些相當的工作來重現錯誤。 –