我正在使用下面的正则表达式(带有pyparsing),该表达式不提供任何输出。知道我在这里做什么错了。
>>> pat = pp.Regex('\s+\w+')
>>> x = " *** abc xyz pqr"
>>> for result, start, end in pat.scanString(x):
print result, start, end
如果\s
被删除。我们得到了数据
>>> pat = pp.Regex('\w+')
>>> x = " *** abc xyz pqr"
>>> for result, start, end in pat.scanString(x):
print result, start, end
['abc'] 8 11
['xyz'] 14 17
['pqr'] 20 23
答案 0 :(得分:3)
根据this,在pyparsing中默认会跳过空格。
在匹配过程中,默认情况下会跳过令牌之间的空格(尽管可以更改)。
但是Regex类是从ParserElement继承的,该类具有一个leftWhitespace()方法。
leaveWhitespace(self)源代码
在匹配字符中的字符之前禁用空白 ParserElement的定义模式。通常只使用 由pyparsing模块在内部进行,但某些情况下可能需要 空格敏感的语法。
因此此代码有效:
>>> pat = pp.Regex('\s+\w+')
>>> pat.leaveWhitespace()
>>> x = " *** abc xyz pqr"
>>> for result, start, end in pat.scanString(x):
print result, start, end
[' abc'] 4 11
[' xyz'] 11 17
[' pqr'] 17 23