使用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
交替使用时,仅找到行开头,而不是两个空格字符。
我想知道我是否忽略了某些内容,或者空白匹配是否无法按预期进行。如果我寻找文字而不是空格,那么我会毫不费力地找到文字和行首。