我正在使用 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中缺少签名细节的常见情况?
答案 0 :(得分:1)
它是hidden gem: - )
这是事情变得有趣的地方。在过去的15年左右, 常规中有一个完全没有记录的功能 表达引擎:扫描仪。扫描仪属于 底层SRE模式对象,引擎在其后保持匹配 找到了下一个匹配。甚至还存在一个re.Scanner类 (也是未记录的),它建立在SRE模式扫描仪的顶部 这使得这个界面略高一些。
re模块中存在的扫描仪不是很有用 不幸的是,没有匹配&#39;部分更快,但看起来 在其源代码中揭示了它是如何实现的:在SRE之上 原语。