【Python】正则表达式

一、re.compile 函数(https://www.cnblogs.com/lzw121/p/6306698.html

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

‘.’    匹配所有字符

* 匹配前一个字符0或多次

+ 匹配前一个字符1次或无限次

? 匹配一个字符0次或1次

^ 匹配字符串开头。在多行模式中匹配每一行的开头

$ 匹配字符串末尾,在多行模式中匹配每一行的末尾。(例如,pattern='.+\.(css|img|js)$'

‘^’和’$’ 匹配字符串开头和结尾

‘/d’ 匹配数字

‘/D’ 匹配非数字

‘/w’ 匹配字母和数字

匹配所有的英文字母和数字,即等价于[a-zA-Z0-9]。

‘/W’ 匹配非英文字母和数字

即’/w’的补集,等价于[^a-zA-Z0-9]。

‘/s’ 匹配间隔符

即匹配空格符、制表符、回车符等表示分隔意义的字符,它等价于[ /t/r/n/f/v]。(注意最前面有个空格)

‘/S’ 匹配非间隔符

即间隔符的补集,等价于[^ /t/r/n/f/v]

‘/A’ 匹配字符串开头

匹配字符串的开头。它和’^’的区别是,’/A’只匹配整个字符串的开头,即使在’M’模式下,它也不会匹配其它行的很首。

‘/Z’ 匹配字符串结尾

匹配字符串的结尾。它和’$’的区别是,’/Z’只匹配整个字符串的结尾,即使在’M’模式下,它也不会匹配其它各行的行尾。

二、返回值(http://www.runoob.com/python/python-reg-expressions.html

text = "XXX"

pattern = re.compile('XXX')

first_string = text.match('XXX').group()     # 匹配第一个符合条件的对象,并用group()返回字符串。

all_strings = text.findall('XXX')                  # 找出所有符合条件的字符串,以数组形式打印。

pattern.sub("", text)                 # 替换text中符合条件内容为空字符串。

re.sub(pattern, "", text)            # 替换text中符合条件内容为空字符串,返回字符串。

关于group作用:

当匹配成功时返回一个 Match 对象,然后:

  • group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0)
  • start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;
  • end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;
  • span([group]) 方法返回 (start(group), end(group))

看一个实例:

>>>import re
>>> pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I)   # re.I 表示忽略大小写
>>> m = pattern.match('Hello World Wide Web')
>>> print m                               # 匹配成功,返回一个 Match 对象
<_sre.SRE_Match object at 0x10bea83e8>
>>> m.group(0)                            # 返回匹配成功的整个子串
'Hello World'
>>> m.span(0)                             # 返回匹配成功的整个子串的索引
(0, 11)
>>> m.group(1)                            # 返回第一个分组匹配成功的子串
'Hello'
>>> m.span(1)                             # 返回第一个分组匹配成功的子串的索引
(0, 5)
>>> m.group(2)                            # 返回第二个分组匹配成功的子串
'World'
>>> m.span(2)                             # 返回第二个分组匹配成功的子串
(6, 11)
>>> m.groups()                            # 等价于 (m.group(1), m.group(2), ...)
('Hello', 'World')
>>> m.group(3)                            # 不存在第三个分组
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: no such group

三、特殊匹配速查(https://blog.csdn.net/u011665991/article/details/80221451

(1)数字

数字:^[0-9]*$

n位的数字:^\d{n}$

至少n位的数字:^\d{n,}$

m-n位的数字:^\d{m,n}$

零和非零开头的数字:^(0|[1-9][0-9]*)$

(2)用户名邮箱等

由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$

Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

(3)日期

日期格式:^\d{4}-\d{1,2}-\d{1,2}

一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$

一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

(4)html标签

re_tag = re.compile('</?\w+[^>]*>')   # HTML标签

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值