Python 正则表达式学习(二)正则表达式语法
来源:互联网 发布:兼职翻译 知乎 编辑:程序博客网 时间:2024/04/29 05:51
一,单一字符匹配:
(1)匹配任意字符: .
import reres = re.match(r'a..','abcd')print(res.group())#打印结果:abc一点.表示匹配任意的字符。上面的代码表示匹配a后面的任意两个字符。必须从a开始。若写成 b.. 则会发生错误。
(2)匹配指定字符:[ ]
如 [ 0-9a-zA-Z ] 表示 匹配一个 0~9或所有英文字母
import reres = re.match(r'[0-9a-zA-Z]',r'abc')print(res.group())#打印结果:a
(3)\d 和 \D:匹配数字和匹配非数字
import reres = re.match(r'\d',r'123abc')print(res.group())#打印结果:1
(4)\s 和 \S :匹配空白字符和非空白字符(就是空格)
(5)\w 和 \W:匹配 0~9,a~z,A~Z的字符 和 非 0~9,a~z,A~Z的字符
跟[ 0-9a-zA-Z ]作用相同
(6)\b 和 \B
\b的作用是匹配一个单词边界,即是单词和空间之间的位置
例如: er\b 可以匹配 never 中的 er ,但不能匹配 verb 中的 er
二,一次匹配多个字符
(1) * 匹配前一个字符0~无限次
import reres = re.match('1*', r'112233abcd')print(res.group())#打印结果:11上面的代码由于 *的前面是1,所以可以匹配无限个1(其实只有2兆多个)
import reres = re.match(r'\w*', r'112233abcd')print(res.group())#打印结果:112233abcd上面的代码则打印全部的字符串
(2)+ 匹配前一个字符 1~无限次
+ 与 * 的区别就是 + 不允许没有匹配到字符,而 * 可以不匹配到字符
import reres = re.match(r'1+', r'112233abcd')print(res.group())#打印结果:11若:
import reres = re.match(r'0+', r'112233abcd')print(res.group())#打印结果:程序报错,因为字符串里没有0
(3)?匹配前一个字符 0次或者1次
import reres = re.match(r'1?', r'1112233abcd')print(res.group())#打印结果:1
(4){m} 和 {n,m} 匹配前一个字符m次 和 匹配前一个字符至少n次至多m次
import reres = re.match(r'1{1,3}', r'111112233abcd')print(res.group())#打印结果:111
三,字符串边界匹配
(1)^ 和 $ 在字符串中
^用在字符串中表示匹配时,^后的第一个字符必须在字符串的第一个位置,而$则规定$前面的内容必须在字符串的最后才能匹配成功,如:
import re#匹配电子邮箱res = re.match(r'\w{3,10}@163.com$',r'zje@163.commm')print(res.group())#打印结果:程序出现错误,因为$表示所在位置必须是字符串的结尾res = re.match(r'\w{3,10}@163.com$',r'zje@163.com')print(res.group())#打印结果:zje@163.com
(2)\A 和 \Z
作用和 ^ 和 $ 一样。
四,分组匹配
(1) |
A|B 的作用是匹配 A 或 B,如:
import re#匹配电子邮箱res = re.match(r'\w+@(163|126|qq)\.com',r'zje@126.com')print(res.group())#打印结果:zje@126.com #这样写不仅可以匹配126的邮箱,还能匹配163和qq邮箱。
(2)分组(ab):作用是()中的ab被视为一个分组
import re#匹配电子邮箱reg = r'<(dir>)\w+</\1'str = r'<dir>test_zje</dir>'res = re.match(reg,str)print(res.group())#打印结果:<dir>test_zje</dir>#上面的代码 括号()括起了 dir> 表示 dir> 为第一个分组,所以后面的\1 就表示第一个分组 dir>
当然也可以给分组起一个名字,用名字来引用分组,如:
import re#匹配电子邮箱reg = r'<(?P<mark>[\w]+>).+</(?P=mark)'str = r'<dir>test_zje</dir>'res = re.match(reg,str)print(res.group())#打印结果:<dir>test_zje</dir>#上面的代码 把第一个分组命名为 mark,然后(?P=mark)表示引用一个命名为mark的分组
(3)向前向后查找
只有在组内才能向前向后查找
如在字符串 src="http://www.xxxxxxx.jpg" 中的 http://www.xxxxxxx.jpg
正则可以这样写: reg = r' ((?<=src=")http://www.xxxxxxx.1.jpg(?=") ) '
前面的(?<=src=)表示若字符串中有 “src=” 这个字符串则匹配,但不返回 “src=“ 这个字符串,用在正则表达式之前
后面的(?=")表示若字符串中有 双引号“ 则匹配,但不返回 双引号” ,用在正则表达式之后。
- Python 正则表达式学习(二)正则表达式语法
- python学习笔记二(正则表达式)
- Python学习(二) 正则表达式
- python正则表达式学习(二)
- 正则表达式二 (正则表达式语法)
- 【正则表达式学习】语法
- Python正则表达式(二)
- python正则表达式(二)
- python正则表达式(二)
- Python正则表达式(二)
- Python:正则表达式(二)
- python正则表达式(二)
- 【正则表达式】(二)、正则表达式的语法
- 正则表达式语法学习(Python/Qt/Vim)
- 正则表达式语法学习(Python/Qt/Vim)
- 关于Python语法、正则表达式的学习
- Python正则表达式二
- 正则表达式学习(二)
- 变量类型
- spy++ 不是很靠谱啊...
- BufferedReader
- iOS基础:Unicode和UTF-8
- 谷哥的小弟学后台(03)——MySQL(3)
- Python 正则表达式学习(二)正则表达式语法
- C++ Primer 第5版--练习8.4
- 如何让alias起的别名永远生效
- javaweb中cookie用法
- 15 Using Forms
- C++ Primer 第5版--练习8.5
- P1914 小书童——密码(洛谷)
- [广义后缀自动机 set启发式合并 || dfs序 树状数组 离线] BZOJ 2780 [Spoj]8093 Sevenk Love Oimaster
- 数据挖掘-K-近邻分类器-Iris数据集分析-根据花瓣长宽分类-以散点图显示(二)