正则表达式与python中re模块

一、正则表达式

正则表达式,一种使用表达式的方式对字符串进行匹配进行匹配的语法规则

正则的优点:速度快、效率高、准确性高

正则的缺点:新手上手难度高

正则的语法:使用元字符进行排列组合用来匹配字符串 (元字符:具有固定含义的特殊符号)

(可以使用在线测试工具OSCHINA)

#常用的元字符(每一种元字符默认只匹配一个字符)
1   .        匹配换行符以外的任意字符
2   \w       匹配字母或数字或下划线(邮箱)
3   \s       匹配任意的空白符(空格、换行、制表符...)
4   \d       匹配数字
5   \n       匹配一个换行符
6   \t       匹配一个制表符

7   ^        匹配字符串的开始
8   $        匹配字符串的结尾

9   \W       匹配 非 字母或数字或下划线
10  \D       匹配 非 数字
11  \S       匹配 非 空白符

12   a|b     匹配字符a或字符b
13   ()      匹配括号内的表达式,也表示一个组
14   []      匹配字符组中的字符
15   [^]     匹配 非 字符组中字符的所有字符

#量词(控制元字符出现的次数)
1   *         重复零次或更多次
2   +         重复一次或更多次
3   ?         重复零次或一次
4   {n}       重复n次
5   {n,}      重复n次或更多次
6   {n,m}     重复n到m次

#贪婪匹配和懒惰匹配
1   .*        贪婪匹配
2   .*?       惰性匹配

二、python中re模块

python使用正则表达式时要使用re模块

1.findall 查找所有并返回list

list = re.findall("m","mai le fo len,mai ni meil")
print(list)
#————>['m','m','m']

2.search 会进行匹配,如果匹配到第一个结果,就会返回这个结果。如果匹配不上,则search返回的是None(返回的也是迭代器)

ret = re.search(r'\d','5点之前你要给我5000万').group()		#.group()拿数据
print(ret)
#————>a

3.match 默认只能从头进行匹配(即在正则前面加上^)

ret=re.match('a','abc').group()
print(ret)
#————>a

4.finditer 和findall差不多,只不过此时返回的是迭代器(迭代器的效率非常高)

it = re.finditer(r"\d+","我的电话号码是10086,我女朋友的电话号码是10010")
for i in it:
    print(i.group())
#————>10086
#————>10010

5.预加载正则表达式(compile)

obj = re.compile(r'\d+')
obj.fanditer("我的电话号码是10086,我女朋友的电话号码是10010")

6.正则中的内容单独提取(单独获取正则中的具体内容可以给分组起名字)

s="<div class='西游记'><span id='10010'>中国联通</span></div>"
obj=re.compile(r"<span id='(?P<id>\d+)'>(?P<name>\w+)</span>",re.S)		#(?P<分组名字>正则)可以单独从正则匹配的内容中进一步提取内容
result=obj.search(s)		#此处不一定都用search,也可以用finditer……
print(result.group())		#————结果:<span id='10010'>中国联通</span>
print(result.group('id'))
print(result.group('name'))

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值