方法regex.scanner()在Python 3.5.1文档中找不到,但是Interpreter工作得很好

时间:2016-05-06 15:04:21

标签: python regex python-3.x python-3.5

我正在使用 Python Cookbook,第三次学习Python。在页67,这是一个像这样的示例代码

import re
NAME = r'(?P<NAME>[a-zA-Z_][a-zA-Z_0-9]*)'
NUM = r'(?P<NUM>\d+)'
PLUS = r'(?P<PLUS>\+)'
TIMES = r'(?P<TIMES>\*)'
EQ = r'(?P<EQ>=)'
WS = r'(?P<WS>\s+)'    
master_pat = re.compile('|'.join([NAME, NUM, PLUS, TIMES, EQ, WS]))
scanner = master_pat.scanner('foo = 42')
scanner.match()
 ......

我试图在Python标准文档中找到方法regex.scanner()的签名,但是我失败了。关于regex.scanner()没有任何内容。另一方面,示例代码与Interpreter一起运行得很快有人知道情况是什么吗?或者它只是CPython中缺少签名细节的常见情况?

1 个答案:

答案 0 :(得分:1)

它是hidden gem: - )

  

这是事情变得有趣的地方。在过去的15年左右,   常规中有一个完全没有记录的功能   表达引擎:扫描仪。扫描仪属于   底层SRE模式对象,引擎在其后保持匹配   找到了下一个匹配。甚至还存在一个re.Scanner类   (也是未记录的),它建立在SRE模式扫描仪的顶部   这使得这个界面略高一些。

     

re模块中存在的扫描仪不是很有用   不幸的是,没有匹配&#39;部分更快,但看起来   在其源代码中揭示了它是如何实现的:在SRE之上   原语。