Pyparsing忽略除外

时间:2015-10-05 08:37:08

标签: python regex comments ignore pyparsing

我有一个文件,行中有pythonStyleComments,例如:

def foo(): # declare
    # Simple function
    a = 0 # TODO: add random
    return a

所以,那么我想将.ignore(pythonStyleComments)添加到pyparsing,但想要处理任何元(例如TODO :)。我知道所有的元词,所以如何排除这些注释忽略?

也许将评论声明为'#'+ Regex(),其中Regex会排除元字?还是pyparsing有更优雅的方法?

2 个答案:

答案 0 :(得分:1)

我建议多次通过处理。首先,为TODO注释定义模式,并使用scanString定位所有这些实例。然后使用解析器运行第二遍,并将TODO与您找到的元素的位置相匹配。

OR(这是完全未经测试的),尝试将解析操作附加到pythonStyleComment,然后像往常一样执行并调用parser.ignore(pythonStyleComment)。如果匹配一个,并且它与您的TODO格式匹配,则将有关该注释及其位置的内容保存到侧面。 (我不肯定被忽略的表达式会运行它们的解析操作,所以你可能不得不采用2遍方法。)

答案 1 :(得分:0)

I have just declared comment = Literal('#').suppress() + Optional(restOfLine)

and then add it as Optional(comment) to the end of each statement, where it could appear. Then add

def commentHandler(t):
    result = []
    if "fixed" in t[0]:
        result.append("fixed")
    if "TODO: " in t[0]:
        try:
            message = t[0].split("TODO: ")[1].strip()
            result.append(message)
        except Exception as e:
            result.append(t[0])
    return result

comment.setParseAction(commentHandler)

So it works perfectly for me.