python3正则模块中的(?(id)yes|no)构造
来源:互联网 发布:php list注意 编辑:程序博客网 时间:2024/05/16 14:19
1.问题
最近需要用python处理一些文档,其中用到正则表达式,发现一段时间不看已经忘得的差不多了,便又从网上翻看一些教程。在此推荐Python正则表达式指南,写的非常全面,很适合新手入门。在使用过程中,对于特殊构造的规则(?(id/name)yes-pattern|no-pattern),笔者遇到了一点问题。对于该规则,指南介绍为:“如果编号id或别名为name的组匹配到字符,需要匹配yes-pattern,否则需要匹配no-pattern。|no-pattern可以省略。”并且给出了示例,规则为'(\d)abc((1)\d|abc)',匹配成功字符串为'1abc2'或者'abcabc',但是在实际操作中,字符串'abcabc'却会报错:'NoneType' object has no attribute 'group',该规则并未匹配到'abcabc'。
2.分析与实验
通过实验发现,在id为1的组后加上+可以成功匹配:
>>>print(re.search(r'(\d)?abc(?(1)\d|abc)','abcabc'))<_sre.SRE_Match object; span=(0, 6), match='abcabc'>#匹配成功再做如下尝试:
>>>print(re.search(r'(\d)+abc(?(1)\d|abc)','abcabc'))None#匹配失败
>>>print(re.search(r'(\d)*abc(?(1)\d|abc)','abcabc'))<_sre.SRE_Match object; span=(0, 6), match='abcabc'>#匹配成功
>>>print(re.search(r'(\d){1,}abc(?(1)\d|abc)','abcabc'))
None#匹配失败
>>>print(re.search(r'(\d){0,}abc(?(1)\d|abc)','abcabc'))<_sre.SRE_Match object; span=(0, 6), match='abcabc'>#匹配成功
似乎可以发现规律,如果id为1的组匹配数不允许为0个的话,当其匹配过程中匹配为0的话规则就会匹配失败。
3.结论
在python3中,执行命令'help(re)',可以看到关于(?(id/name)yes|no)的说明:“Matches yes pattern if the group with id/name
matched,the (optional) no pattern otherwise.”
所以我们可以理解为,当该特殊规则中的作为判断条件的组本身不允许为空的时候,在该组对目标字符串匹配为空的情况下,
整体规则匹配失败,所以后面的作为整体一部分的特殊规则自然也就无效了。所以要想特殊规则的no-pattern生效,必须判断条件对
应组匹配数可以为0。
- python3正则模块中的(?(id)yes|no)构造
- python3 中的queue模块
- python3.x中的urllib模块
- python3.x中的urllib模块
- python3中的struct模块使用
- 正则表达式 python3.x (re模块)
- Python3的正则表达式,re模块
- Python3正则表达式(二)re模块
- 覆写 javascript中的window.confirm 显示yes/no 按钮
- Oracle进程中的 LOCAL=NO 和 LOCAL=YES
- 关于Confirm Popup中的YES,NO换成中文
- 判断n个数中的素数,是yes,不是no。
- "Yes" or "No"
- emacs:yes or no
- Yes或者No
- 用yes代替no
- HTK yes/no识别
- 会员:YES or NO
- 基于ajaxFileUpload,兼容ie7以上、chrome等浏览器的文件上传功能
- API3
- 欢迎使用CSDN-markdown编辑器
- dobbo配置
- 2048游戏(java控制台-原生jdk实现)
- python3正则模块中的(?(id)yes|no)构造
- Scroller
- Java 反射机制
- 文章标题
- python 写的方法返回的是个中文,在 rf 日志中显示的却是乱码解决方法
- PHP之static静态变量详解(一)
- Adversarial Sample misleading the Model(生成对抗样本迷惑模型)
- 问题Incompatible ssh peer
- 2.python连接mongodb,利用微博数据制作云图