python正则表达式仅按特定顺序拆分某些字符串

python正则表达式仅按特定顺序拆分某些字符串,python,regex,parsing,tokenize,Python,Regex,Parsing,Tokenize,我有以下tokenizeAndParse(s)函数,它接受一个字符串并尝试将其标记为一个字符串数组 def tokenizeAndParse(s): tokens = re.split(r"(\s+|assign|:=|print|\+|if|while|{|}|;|[|]|,|@|for|true|false|call|procedure|not|and|or|\(|\))", s) tokens = [t for t in tokens if not t.isspace()

我有以下tokenizeAndParse(s)函数,它接受一个字符串并尝试将其标记为一个字符串数组

def tokenizeAndParse(s):
    tokens = re.split(r"(\s+|assign|:=|print|\+|if|while|{|}|;|[|]|,|@|for|true|false|call|procedure|not|and|or|\(|\))", s)
    tokens = [t for t in tokens if not t.isspace() and not t == ""]
    print("hello",tokens)
函数的一些示例

tokenizeAndParse("assign abc := [true, true, true];")
hello ['assign', 'abc', ':=', '[', 'true', ',', 'true', ',', 'true', ']', ';']

tokenizeAndParse("print 5+5;")
hello ['print', '5', '+', '5', ';']
我遇到了一个有趣的问题,如果我调用下面的代码,4]没有被解析为单独的标记,我不知道为什么。如上所示,如果在]之前为true,则该函数工作正常

 tokenizeAndParse("assign abc := [true, true, 4];")
 hello ['assign', 'abc', ':=', '[', 'true', ',', 'true', ',', '4]', ';']

进一步使用该函数表明,如果它是]前面的一个数字,它将无法正确解析。这里发生了什么事?

原因是您没有在数字上进行拆分。替换以下代码行:

tokens = re.split(r"(\s+|assign|:=|print|\+|if|while|{|}|;|[|]|,|@|for|true|false|call|procedure|not|and|or|\(|\))", s)
如下图所示:

>>> def tokenizeAndParse(s):
    tokens = re.split(r"(\s+|assign|:=|print|\+|if|while|{|}|;|[|]|,|@|for|true|false|call|procedure|not|and|or|\(|\)|[0-9]+)", s)
    tokens = [t for t in tokens if not t.isspace() and not t == ""]
    print("hello",tokens)

>>> tokenizeAndParse("assign abc := [true, true, 4];")
('hello', ['assign', 'abc', ':=', '[', 'true', ',', 'true', ',', '4', ']', ';'])
这将解决问题