Python正则表达式(二):预设字符
来源:互联网 发布:c 软件下载 编辑:程序博客网 时间:2024/05/19 09:09
1、常用预设字符:
\d
匹配任何十进制数
等同于[0-9]
\D
匹配任何非数字字符
等同于 [^0-9]
\s
匹配任何空白字符
等同于 [ \t\n\r\f\v]
\S
匹配任何非空白字符
等同于 [^ \t\n\r\f\v]
\w
匹配任何字母数字字符
等同于[a-zA-Z0-9_]
\W
匹配任何非字母数字字符
等同于 [^a-zA-Z0-9_]
2、其他预设字符
\A
只匹配字符串首
当不在 MULTILINE 模式,\A 和 ^ 实际上是一样的。然而,在 MULTILINE 模式里,\A 只是匹配字符串首,而 ^ 则匹配每行行首。
>>> ref = re.compile("^a[a-z]*")>>> print ref.findall("""abc... ddd... aaa... 111""")['abc']>>> ref = re.compile("^a[a-z]*",re.M)>>> print ref.findall("""abc... ddd... aaa... 111""")['abc', 'aaa']>>> ref = re.compile("\Aa[a-z]*")>>> print ref.findall("""abc... ddd... aaa... 111""")['abc']
\Z
只匹配字符串尾
\f
匹配一个换页符
等价于 \x0c 和 \cL
\n
匹配一个换行符
等同于 \x0a 和 \cJ
\r
匹配一个回车符
等同于 \x0d 和 \cM
\t
匹配一个制表符
等同于 \x09 和 \cI
\v
匹配一个垂直制表符
等同于 \x0b 和 \cK
3、其他预设字符之零宽界定符(零宽界定符,是一个比较重要的概念,在后文中会详细阐述)
\b
单词边界
单词被定义为一个字母数字序列,因此词尾就是用空白符或非字母数字符来标示的。
>>> ref = re.compile(r"\bchinese\b")>>> print ref.search("i am a chinese")<_sre.SRE_Match object at 0x016129F8>>>> print ref.search("i am a chinese boy")<_sre.SRE_Match object at 0x016129F8>
\B
非单词边界
(?=...)
前向肯定界定符
... 表示 正则表达式。如果... 匹配成功,则返回成功。但是它并没有占位。
只有当...返回成功时,才会进行后续匹配。
>>> ref = re.compile("^(?=a)a{3}$")>>> print ref.match("aaa")<_sre.SRE_Match object at 0x013529F8>>>> ref = re.compile("^aa{3}$")>>> print ref.match("aaa")None
说明:零宽界定符并没有占位,它只是负责匹配。
就像一支10人的队伍,如果用非零宽界定符,来匹配第1个的性别,如果匹配成功,则匹配引擎会移至第2个;使用零宽界定符,则匹配引擎仍在第1个。
(?!...)
前向否定界定符
... 表示 正则表达式。如果... 匹配失败,则返回成功。
只有当...返回成功时,才会进行后续匹配。
示例:将以 "bat" 或 "exe" 结尾的文件名排除在外
ref = re.compile(".*[.](?!bat$|exe$).*$")
4、其他预设字符之捕获组、命名组
\num
捕获组
\num表示复制 group(num) 的结果,其中num表示组号
与\g<num>等同
>>> ref = re.compile(r"(a{3})(bb)\2")>>> print ref.match(r"aaabbbb").group()aaabbbb>>> print ref.match(r"aaabbbb").group(1)aaa>>> print ref.match(r"aaabbbb").group(2)bb
(?P<name>...)
命名组
命名组与捕获组作用和原理都相同,不同的是:捕获组用数字指定位置,而命名组用名字指定位置
>>> ref = re.compile(r"a{3}(?P<name>bb)(?P=name)")>>> print ref.match(r"aaabbbb").group()aaabbbb
建议:尽可能用命名组来取代捕获组。
小结:通过元字符以及预设字符的学习,你已经初步的掌握了正则表达式的书写。然而书写正则表达式,也仅仅是第一步。
下一篇中,我们将学习正则表达式的编译与匹配。
另外,由于正则表达式的复杂与高度抽象,因此我们很难一次就写出满足需求的正则表达式,试错、修改是必须的。
- Python正则表达式(二):预设字符
- Python正则表达式(二)
- python正则表达式(二)
- python正则表达式(二)
- Python正则表达式(二)
- Python:正则表达式(二)
- python正则表达式(二)
- 正则表达式(二)常用元字符
- 正则表达式(二)转义字符
- 正则表达式(二)-- 匹配一组字符
- Python正则表达式(一):元字符
- Python正则表达式二
- Python 正则表达式学习(二)正则表达式语法
- python学习笔记二(正则表达式)
- python正则表达式 re (二)compile
- python正则表达式 re (二)split
- python正则表达式 re (二)sub
- python正则表达式 re (二)escape
- sublime text安装package control
- 给Eclipse换个启动界面
- XCode报错 has been modified since the precompiled header was built
- acm练习各个阶段
- centos上php的安装、配置与扩展
- Python正则表达式(二):预设字符
- E430 win7 32bit 系统 4g 内存 显示只有 2.38g 可以使用的解决办
- 学习笔记(二):cookie的基本使用
- 最长单调递增子序列
- IDA 可变的结构体
- tar压缩与解压缩
- 蓝桥杯 - 历届试题 - PREV-26 - 最大子阵 (最大子矩阵和,dp)
- xpe 定制学习
- 北斗一号卫星导航系统与GPS的对比