Pyparsing:空格和行开始的交替

时间:2019-12-05 11:43:06

标签: 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(空格)或NL(行开头),则解析器确实会找到正确的发生。

但是,当与Or|MatchFirst交替使用时,仅找到行开头,而不是两个空格字符。

我想知道我是否忽略了某些内容,或者空白匹配是否无法按预期进行。如果我寻找文字而不是空格,那么我会毫不费力地找到文字和行首。

0 个答案:

没有答案