我正在用python语言编写一个简单的解析器,并且正在使用python内置的re模块。
由于某种原因,表达式[| ]*(\$ *[a-z0-9\-]+ *{ *[a-z0-9$\-{}"| ]* *})
与表达式$ math-mult {5|8}
不匹配。
我已经重读了两次文档,并阅读了大多数相关的堆栈溢出问题。
编辑:这是当前的解析器:
def cut(line, remove_quotes = True):
pos = 0
tokens = []
regexprs = [
(re.compile(r'[| ]*(\$ *[a-z0-9\-]+ *{ *[a-z0-9$\-{}"| ]* *})'), 'KEEP'),
(re.compile(r'[| ]*"(.+?)"'), 'KEEP'),
(re.compile(r'[a-z0-9]+'), 'KEEP'),
(re.compile(' +'), 'THROW'),
(re.compile('\|'), 'THROW')
]
if not remove_quotes:
regexprs[0] = re.compile(r'[| ]*(".+?")')
while pos < len(line):
for regex,status in regexprs:
match = regex.match(line,pos)
if match is not None:
pos = match.end(0)
if status == 'KEEP':
tokens.append(match.group(regex.groups))
break
if match is None:
end_pos = line.find(' ', pos)
if end_pos == -1:
end_pos = len(line)
tokens.append(line[pos:end_pos])
pos = end_pos + 1
return list(filter(lambda x: len(x.lstrip(' ')),tokens))
感谢您的提前帮助!
答案 0 :(得分:0)
应匹配的regexp是regexprs数组的第一个元素(即regexprs[0]
)。这段代码:
if not remove_quotes:
regexprs[0] = re.compile(r'[| ]*(".+?")')
正在用新的正则表达式替换它。