繁体   English   中英

Pyparsing忽略除了

[英]Pyparsing ignore except

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

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

因此,那么我想将.ignore(pythonStyleComments)添加到pyparsing中,但要处理任何元数据(例如TODO:)。 我知道所有的元词,因此如何排除此注释呢?

也许将注释声明为“#” + Regex(),其中Regex将排除元单词? 还是pyparsing有更优雅的方法?

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

或(完全未经测试),尝试将解析动作附加到pythonStyleComment,然后像往常一样执行并调用parser.ignore(pythonStyleComment)。 如果匹配,并且匹配您的TODO格式,则将有关该注释及其位置的内容保存到一边。 (我不认为忽略的表达式可以运行其解析动作,因此您可能必须采用2遍方法。)

我刚刚宣布comment = Literal('#').suppress() + Optional(restOfLine)

然后将其作为Optional(comment)添加到每个语句的末尾(可能会出现)。 然后加

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)

因此,它对我来说非常理想。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM