Python 在PyParsing中,如何指定一个或多个不以某个字符串开头的行?
我试图解析多行文件中的一些字段,其中我只对一些行感兴趣,而其他行我想跳过。下面是一个类似于我尝试做的事情的示例:Python 在PyParsing中,如何指定一个或多个不以某个字符串开头的行?,python,pyparsing,Python,Pyparsing,我试图解析多行文件中的一些字段,其中我只对一些行感兴趣,而其他行我想跳过。下面是一个类似于我尝试做的事情的示例: from pyparsing import * string = "field1: 5\nfoo\nbar\nfield2: 42" value1 = Word(nums)("value1") value2 = Word(nums)("value2") not_field2 = Regex(r"^(?!field2:).*$") expression = "field1:" +
from pyparsing import *
string = "field1: 5\nfoo\nbar\nfield2: 42"
value1 = Word(nums)("value1")
value2 = Word(nums)("value2")
not_field2 = Regex(r"^(?!field2:).*$")
expression = "field1:" + value1 + LineEnd() + OneOrMore(not_field2)+ "field2:" + value2 + LineEnd()
tokens = expression.parseString(string)
print tokens["value1"]
print tokens["value2"]
其中,非以字段2:
开头的行的Regex
从中改编。但是,运行这个示例脚本会给出一个
pyparsing.ParseException: Expected Re:('^(?!field2:).*$') (at char 10), (line:2, col:1)
我希望
value2
以42
结束,而不考虑行数(foo\n
和bar\n
)。如何实现这一点?正则表达式中的“^”和“$”字符不是通过pyparsing逐行解释的,而是在被解析的整个字符串的上下文中解释的。因此“^”将仅在字符串的最开头匹配,而“$”仅在字符串的最末尾匹配
相反,您可以:
not_field2 = LineStart() + Regex(r"(?!field2:).*")