python - 使用 pyparsing 匹配行开头的空格

标签 python pyparsing

我正在尝试使用 pyparsing 来解析统一的 diff 文件作为练习,但我无法得到正确的结果。这是我的 diff 文件中给我带来麻烦的部分:

(... some stuff over...)
 banana
+apple
 orange

第一行以“”开头,然后是“banana”。我有以下表达式来解析一行:

linestart = Literal(" ") | Literal("+") | Literal("-")
line = linestart.leaveWhitespace() + restOfLine

这在解析单行时有效,但是当我尝试解析整个文件时,“leaveWhitespace”指令使解析器从最后一行的末尾开始。在我的示例中,解析“香蕉”后,下一个字符是“\n”(因为leaveWhitespace),并且解析器尝试匹配“”或“+”或“-”,因此抛出错误。

我该如何正确处理这个问题?

最佳答案

您可以一次读取并解析一行。以下代码对我有用。

from pyparsing import Literal, restOfLine

linestart = Literal(" ") | Literal("+") | Literal("-")
line = linestart.leaveWhitespace() + restOfLine

f = open("/tmp/test.diff")
for l in f.readlines():
  fields = line.parseString(l)
  print fields

输出是

[' ', 'banana']
['+', 'apple']
[' ', 'orange']

或者,如果您必须解析多行,则可以显式指定 LineEnd

linestart = Literal(" ") | Literal("+") | Literal("-")
line = linestart.leaveWhitespace() + restOfLine + LineEnd()
lines = ZeroOrMore(line)
lines.parseString(f.read())

关于python - 使用 pyparsing 匹配行开头的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4231835/

相关文章:

python - 根据另一个列表或数组查找数组/列表中元素的索引

python - 在 matplotlib 中使用标记绘制序数数据

python - 如何使用 pyparsing 解析小数表达式?

python - 使用 pyparsing 对结果进行类型检查

python - 使用 PyParsing 解析 Snort 日志

python - 评估 WFF 逻辑表达式时出现 Pyparsing 错误?

python - 用 pandas 生成 "working hours"区间索引

python - 在 scikit-learn 中使用相似矩阵代替 MDS 的相异矩阵

python - Flask-如何处理URL中的中文字符

python - PyParsing,匹配以白色开头的行