python – ply lexmatch正则表达式具有与通常重复不同的组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – ply lexmatch正则表达式具有与通常重复不同的组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1140字,纯文字阅读大概需要2分钟。
内容图文
我正在使用ply并注意到存储在t.lex.lexmatch中的令牌重新匹配与使用re模块以通常方式定义的sre_pattern之间存在奇怪的差异.小组(x)似乎是1.
我已经定义了一个简单的词法分析器来说明我所看到的行为:
import ply.lex as lex
tokens = ('CHAR',)
def t_CHAR(t):
r'.'
t.value = t.lexer.lexmatch
return t
l = lex.lex()
(我收到关于t_error的警告但暂时忽略它.)现在我将一些输入提供给词法分析器并获取一个令牌:
l.input('hello')
l.token()
我得到一个LexToken(CHAR,< _sre.SRE_Match对象,位于0x100fb1eb8>,1,0).我想看一下匹配对象:
m = _.value
所以现在我看看这些小组:
m.group()=> ‘h’正如我所料.
m.group(0)=> ‘h’正如我所料.
m.group(1)=> ‘h’,但我希望它没有这样一个团体.
将此与手动创建这样的正则表达式进行比较:
import re
p = re.compile(r'.')
m2 = p.match('hello')
这给了不同的群体:
m2.group()=’h’正如我所料.
m2.group(0)=’h’正如我所料.
m2.group(1)给出了IndexError:没有我期望的那样的组.
有谁知道为什么存在这种差异?
解决方法:
在PLY的3.4版本中,出现这种情况的原因与表达式如何从文档字符串转换为模式有关.
查看源代码确实有帮助 – lex.py的第746行:
c = re.compile("(?P<%s>%s)" % (fname,f.__doc__), re.VERBOSE | self.reflags)
我不建议在版本之间依赖类似的东西 – 这只是PLY工作原理的一部分.
内容总结
以上是互联网集市为您收集整理的python – ply lexmatch正则表达式具有与通常重复不同的组全部内容,希望文章能够帮你解决python – ply lexmatch正则表达式具有与通常重复不同的组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。