ich auf einem Python-Parser an Arbeitslage mit und ich habe Eingang in Form zu analysieren:PLY: unzulässiges Zeichen ‚+‘
VAR VAR1 001
+000 000 000 000
Wo der Code eine Variable VAR genannt schaffen würde 1 weisen Sie dann die Wert 0 bis es
die Regex ich für die Instanciation geschrieben hat, ist:
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]'
jedoch, wenn mein Programm ausgeführt wird, PLY druckt die folgenden:
Illegal character '+'
A reproducer folgt:
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")
Sie sollten \ d verwenden Zeichen zu bezeichnen und nutzen auch {} bezeichnen Sequenzen wiederholen: [\ + -] (\ d {3} \ s?) {4} – Neil
Warum der Backslash? Sie möchten das in einem normalen Kontext, aber es macht keinen Sinn in einer Zeichenklasse.Wenn "|" kein gültiges erstes Zeichen ist, wollen Sie wahrscheinlich auch '[+ -]', nicht '[+ | -]'. –
Übrigens wäre es hilfreich, wenn Ihr Reproduzierer - solange er wie * minimal * bleibt - bis zu dem Punkt erweitert wird, an dem er * vollständig * und * überprüfbar * ist, wie in http://stackoverflow.com/ angegeben. Hilfe/mcve. Gerade jetzt muss jemand ziemlich viel Arbeit machen, um den Fehler zu reproduzieren. –