PyParsing,匹配以白色开头的行
PyParsing, matching lines beginning with White
鉴于以下语法对换行符敏感,我如何忽略以空格开头的注释?
pp.LineStart() + pp.Optional(pp.White(" \t")) + '#'
不匹配以空格开头的行。
import pyparsing as pp
pp.ParserElement.setDefaultWhitespaceChars(' \t')
def Line(expr): return expr + pp.Suppress(pp.LineEnd())
foo = Line(pp.Group(pp.OneOrMore(pp.Word(pp.alphas))))
parser = pp.OneOrMore(foo)
comment = '#' + pp.restOfLine()
parser.ignore(pp.LineStart() + pp.Optional(pp.White(" \t")) + pp.Optional(comment) + pp.LineEnd())
parser.ignore(comment)
text = """
foo abc
# comment
bar # comment
"""
results = parser.parseString(text, parseAll=True)
assert list(results[0]) == ['foo', 'abc']
text = """
foo abc
# comment
bar
"""
results = parser.parseString(text, parseAll=True)
print "ok"
仅包含注释的行可以在输入中留下悬空的 LineEnd。将解析器更改为:
parser = pp.OneOrMore(foo | pp.LineEnd().suppress())
鉴于以下语法对换行符敏感,我如何忽略以空格开头的注释?
pp.LineStart() + pp.Optional(pp.White(" \t")) + '#'
不匹配以空格开头的行。
import pyparsing as pp
pp.ParserElement.setDefaultWhitespaceChars(' \t')
def Line(expr): return expr + pp.Suppress(pp.LineEnd())
foo = Line(pp.Group(pp.OneOrMore(pp.Word(pp.alphas))))
parser = pp.OneOrMore(foo)
comment = '#' + pp.restOfLine()
parser.ignore(pp.LineStart() + pp.Optional(pp.White(" \t")) + pp.Optional(comment) + pp.LineEnd())
parser.ignore(comment)
text = """
foo abc
# comment
bar # comment
"""
results = parser.parseString(text, parseAll=True)
assert list(results[0]) == ['foo', 'abc']
text = """
foo abc
# comment
bar
"""
results = parser.parseString(text, parseAll=True)
print "ok"
仅包含注释的行可以在输入中留下悬空的 LineEnd。将解析器更改为:
parser = pp.OneOrMore(foo | pp.LineEnd().suppress())