正则表达式未正确正则表达式

时间:2018-10-05 19:08:25

标签: python regex

我正在用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))

感谢您的提前帮助!

1 个答案:

答案 0 :(得分:0)

应匹配的regexp是regexprs数组的第一个元素(即regexprs[0])。这段代码:

if not remove_quotes:
   regexprs[0] = re.compile(r'[| ]*(".+?")')

正在用新的正则表达式替换它。