首页 > 解决方案 > Pyparsing:空格和行开始的交替

问题描述

使用 pyparsing,我想获得一个以空格开头或位于行首的标记列表。但我正在努力寻找空格和行开头,更不用说实际的标记:

from pyparsing import LineStart, MatchFirst, Regex, Or, White


WS = White(" ")
NL = LineStart()
# Same result with:
# NL = Regex("(?m)^")

data = """
Line one.
Line two.
"""
parser = MatchFirst((WS, NL))
# Same result with:
# parser = WS | NL (equivalent to MatchFirst)
# parser = Or((Ws, NL))
# parser = WS ^ NL (equivalent to Or)

result = parser.searchString(data)
print(f'{len(result)} matches.')
# 3 matches.
# Should be 5 matches.

parser = NL
result = parser.searchString(data)
print(f'{len(result)} matches.')
# 3 matches.
# Correct.

parser = WS
result = parser.searchString(data)
print(f'{len(result)} matches.')
# 2 matches.
# Correct.

data字符串有 2 个空格和 3 个行开头,如果我只使用WS(whitespace) 或NL(line start),解析器确实会找到正确的出现次数。

但是,当使用、 或的交替时Or,只会找到行首,而不是两个空白字符。|MatchFirst

我想知道我是否忽略了某些东西,或者空格匹配是否按预期工作。如果我查找文字而不是空格,则可以轻松找到文字和行开头。

标签: pyparsing

解决方案


推荐阅读