簡體   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