发布于2019-08-07 11:52 阅读(3306) 评论(0) 点赞(5) 收藏(1)
本测试使用python的re.compile与re.search作为方法测试包含error不包含abc的实例
python简单正则里只介绍到了不包含某字符的正则:[^1-9a-z],[^abc]也只能完成不匹配a、b、c三个字母的功能,但是这个并不能实现不匹配"abc“字符串的功能
这里要用到正则表达式中的断言知识:
(?=X ) |
零宽度正先行断言。仅当子表达式 X 在 此位置的右侧匹配时才继续匹配。例如,/w+(?=/d) 与后跟数字的单词匹配,而不与该数字匹配。此构造不会回溯。 |
(?!X) |
零宽度负先行断言。仅当子表达式 X 不在 此位置的右侧匹配时才继续匹配。例如,例如,/w+(?!/d) 与后不跟数字的单词匹配,而不与该数字匹配 。 |
(?<=X) |
零宽度正后发断言。仅当子表达式 X 在 此位置的左侧匹配时才继续匹配。例如,(?<=19)99 与跟在 19 后面的 99 的实例匹配。此构造不会回溯。 |
(?<!X) |
零宽度负后发断言。仅当子表达式 X 不在此位置的左侧匹配时才继续匹配。例如,(?<!19)99 与不跟在 19 后面的 99 的实例匹配 |
从断言的表达形式可以看出,它用的就是分组符号,只不过开头都加了一个问号,这个问号就是在说这是一个非捕获组,这个组没有编号,不能用来后向引用,只能当做断言。(对于正则表达式的断言感兴趣的同学,可以再查一查资料,这里不多做赘述)
所以这里我们不想匹配abc字符串就得用这个表达式: (?!abc)
测试代码:
- import re
- p = re.compile(r'error(?!abc)'
- print p.search("errorabc")
- print p.search("errorab")
结果:
None
<_sre.SRE_Match object at 0x7f129ce34b90>
那么我想不匹配"error123bsc"这个字符串呢?你是不是以为 error.*(?!abc) 这么写这个正则就可以了,我们来试试
- import re
- p = re.compile(r'error.*(?!abc)'
- print p.search("error123abc")
结果:
<_sre.SRE_Match object at 0x7f129ce34bf8>
看,失败了吧!那怎么写呢?这么写:error((?!abc).)*$
知道了(?!abc),那么可以理解((?!abc).)* 的意思就是匹配 不含abc的字符(?!abc) 跟 任意字符. 的组合,出现任何次*
很多人会问,"$"不是匹配行末尾么,确实是这个意思,不明白请精度上面一句话再来看正则,然后我们来测一下:
- import re
- p = re.compile(r'error((?!abc).)*$')
- print p.search("error123abc")
- print p.search("error123abc123")
- print p.search("error123ab123")
结果:
None
None
<_sre.SRE_Match object at 0x7f129ce81a08>
明白了吧!
以此类推,你要是想匹配包含error不包含error前后的abc,那么应该是这么写这个正则:
测一下:
- import re
- p = re.compile(r'^((?!abc).)*error((?!abc).)*$')
- print p.search("123abc123error123")
- print p.search("123ab123error123")
结果:
None
<_sre.SRE_Match object at 0x7f129ce81a08>
我们要是想匹配包含error不包含多个字符串,比如abc和def,这么写正则: error((?!(abc|def)).)*$
测试:
- import re
- p = re.compile(r'error((?!(abc|def)).)*$')
- print p.search("error123abc234")
- print p.search("error123ab234")
- print p.search("error123def234")
结果:
None
<_sre.SRE_Match object at 0x7f87973eccf0>
None
测试完成!
作者:我是女王
链接:https://www.pythonheidong.com/blog/article/10501/5596489d47fd3b506bb4/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!