Python正则表达式中的 零宽断言 …
来源:互联网 发布:客户生日提醒软件 编辑:程序博客网 时间:2024/06/06 01:56
首先说明一下什么是零宽断言,所谓零宽断言就是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置。正则表达式中有很多这样的断言,常见的如匹配字符串或者行的起始位置^ 和 /A,匹配字符串或者行的末尾 $ 和 /Z,单词边界/B等等。
(?:...) 非捕获组 只是无捕获组匹配exp,但不捕获匹配的文本,也不给这个组分配组号。
print '1:' +s1.group()
print '2:' +s2.group()
print '1:' +s1.group()
print '2:' +s2.group()
print '3:' +s3.group()
print '4:' +s4.group()
这些简单的就不说了,正则表达式中只有当断言为真时才会继续进行匹配。
import re
pattern =
string1 =
string2 =
s1 =pattern.search(string1)
if s1:
s2 =pattern.search(string2)
if s2:
返回
>>>
11 00 find
^(?!00)就是说^这个表示开头,开头后面不跟有00。
注意
-
group() 同group(0)就是匹配正则表达式整体结果 -
group(1) 列出第一个括号匹配部分,group(2)列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。
这里如果用 prints2.group(1) 就会出错,所以说 (?! exp)这个括号并不表示捕获。也不分配组号。
import re
pattern = re.compile('^((?!00).)*$') ##只要字符串中出现00 就不匹配
string1 = '00 00 find'
string2 = '11 00 find'
s1 = pattern.search(string1)
if s1:
s2 = pattern.search(string2)
if s2:
这样就一个也不匹配。
表达式(?!00).会往前查找,看看前面是不是没有“00”字串,如果没有(是其它字符),那么.(点号)就会匹配这些其它字符。但这样只会匹配一次。
((?!00).)* 这样就能匹配0次或多次了。
注意
^((?!00).)*$ 以^ 开头, $结尾,表示在整个字符串中搜寻。
import re
pattern = re.compile('^((?!00).)*find$')
string1 = '00 00 find'
string2 = '11 00 find'
string3 = '11 11 find'
string4 = '11 11 find?'
s1 = pattern.search(string1)
if s1:
s2 = pattern.search(string2)
if s2:
s3 = pattern.search(string3)
if s3:
s4 = pattern.search(string4)
if s4:
>>>
3:11 11 find
0 0
- Python正则表达式中的 零宽断言 …
- Python - 正则表达式指南
- 正则表达式---A bytes of python
- 【原创】python assert 断言
- javascript 正则表达式
- editplus 正则表达式
- 正则表达式 集锦
- 正则表达式 LINUX
- 正则表达式 笔记
- 正则表达式【Pattern 】
- 正则表达式 总结
- 正则表达式中的零宽断言
- Py正则表达式中的【零宽断言】
- ios 利用正则表达式判…
- js 正则表达式 输入框只…
- Javascript 正则表达式 RegExp
- java正则表达式 .* 和 .*?的区别
- orcale 正则表达式 字符簇
- Python 处理文件例程
- Git 的有用操作 (更新)
- PyQt学习笔记(7)——Qt Design…
- linux 将模块编译进内核
- python super 继承
- Python正则表达式中的 零宽断言 …
- makefile中的all和.PHONY的…
- C# 单例(Singleton)模式
- 从几个简单例子了解CUDA内核的几个…
- WINDOWS 下编译CUDA的好方法
- 基于CUDA的GPU优化建议
- 一些mapreduce程序分析
- sql语句实现一个输入框下多条件查询
- 关于Python中的yield