为什么PLY对待正则表达式的方式不同于Python/re?

为什么PLY对待正则表达式的方式不同于Python/re?,python,regex,ply,Python,Regex,Ply,一些背景: 我正在编写一个解析器,用标记语言从站点检索信息。作为维基工具的标准库。。。不要为我工作,因为我需要更具体一些,使它们适应我的需要会给我和问题之间带来一层复杂性。Python+“simple”regex让我很难以透明的方式识别标记语言中不同“标记”之间的依赖关系——因此显然,我需要在旅程结束时到达PLY 现在看来,PLY通过regex识别令牌的方式与Python不同,但我在上面找不到什么。如果我不理解PLY如何在其lexer中确定令牌,我不想继续(否则我将无法控制我所依赖的逻辑,并将在

一些背景:

我正在编写一个解析器,用标记语言从站点检索信息。作为维基工具的标准库。。。不要为我工作,因为我需要更具体一些,使它们适应我的需要会给我和问题之间带来一层复杂性。Python+“simple”regex让我很难以透明的方式识别标记语言中不同“标记”之间的依赖关系——因此显然,我需要在旅程结束时到达PLY

现在看来,PLY通过regex识别令牌的方式与Python不同,但我在上面找不到什么。如果我不理解PLY如何在其lexer中确定令牌,我不想继续(否则我将无法控制我所依赖的逻辑,并将在稍后阶段失败)

我们开始:

import ply.lex as lex

text = r'--- 123456 ---'
token1 = r'-- .* --'
tokens = (
   'TEST',
)
t_TEST = token1

lexer = lex.lex(reflags=re.UNICODE, debug=1)
lexer.input(text)
for tok in lexer:
    print tok.type, tok.value, tok.lineno, tok.lexpos
结果:

lex: tokens   = ('TEST',)
lex: literals = ''
lex: states   = {'INITIAL': 'inclusive'}
lex: Adding rule t_TEST -> '-- .* --' (state 'INITIAL')
lex: ==== MASTER REGEXS FOLLOW ====
lex: state 'INITIAL' : regex[0] = '(?P<t_TEST>-- .* --)'
TEST --- 123456 --- 1 0
给出:

Match found:  -- 123456 --
No match
(正如所料,第一个是“搜索”的结果,第二个是“匹配”)

我的设置:我正在使用spyder-这是开始时的终端显示:

Python 2.7.5+ (default, Sep 19 2013, 13:49:51) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.

Imported NumPy 1.7.1, SciPy 0.12.0, Matplotlib 1.2.1
Type "scientific" for more details.
感谢您的时间和帮助。

中的答案在这里也有帮助。在lex.py中:

c = re.compile("(?P<%s>%s)" % (fname,f.__doc__), re.VERBOSE | self.reflags)
c=re.compile(“(?P%s)”%)(fname,f.uuuu doc_uuuuuuuuuu),re.VERBOSE | self.reflags)
请注意
VERBOSE
标志。这意味着
re
引擎忽略正则表达式中的空白字符。所以
r'-.*-'
实际上是指
r'-.*-'
,它确实完全匹配一个字符串,比如
'--foobar-->。有关更多详细信息,请参阅
re.VERBOSE
的文档。

我再次查看了。没有关于这个设置的提示(至少我找不到)。第4.3章或第4.19章将是正确的地方。但这种设置是有意义的。非常感谢。
c = re.compile("(?P<%s>%s)" % (fname,f.__doc__), re.VERBOSE | self.reflags)