pyparsing scanString与无法解析的空间

时间:2018-09-12 07:45:31

标签: python regex pyparsing

我正在使用下面的正则表达式(带有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

1 个答案:

答案 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