【发布时间】:2021-02-21 17:23:34
【问题描述】:
我正在用 Python 编写一个 Lisp 解析器,作为编译器项目的一部分。我的标记器的工作原理是这样的:
def tokenize(filename):
with open(filename, "r") as file:
comment_free = remove_comments(file.read())
return comment_free.replace("(", " ( ").replace(")", " ) ").split()
Lisp 字符有点不同:字符 a 将是 #\a,( 将是 #\(,等等。对于包含左括号或右括号的字符,它们被分词器错误地分成两个单独的部分(#\ 和 ( 或 ))。
我可以将字符指示符与[^#\] 匹配,将括号与\(|\) 匹配,但是我将如何创建一个模式来检查代码的一部分是否不以字符指示符开头并后跟左括号或右括号?如果我可以制作这样的模式,我可以用括号替换所有这样的实例,括号周围有空格。我认为([^#\\])(\(|\))* 可以工作,但并非在所有情况下都有效。有没有精通正则表达式的人知道如何解决这个问题?
【问题讨论】:
标签: python regex parsing match regex-lookarounds