Python正则表达式之初识正则表达式

一、正则表达式
正则表达式(Regular Expressions):一种字符串匹配模式,达到一种类似于模糊查询的效果。
Python中通过调用re库import re引入正则模块后可进行相关匹配操作。
二、re库常用函数
1、re.search()
与Python自带的字符串函数find()类似,find()在字符串中寻找指定的字符串的位置,并返回该字符串首次出现的首字母的索引。如果字符串未找到,返回-1。

s='hello'
s.find('o')

输出:4

re.search()中如果匹配字符串未找到,无返回值。

re.search(r'h','hello,9mynmaeis')

输出:<re.Match object; span=(0, 1), match=‘h’>

2、re.findall()
在字符串中返回正则表达式所匹配的的所有子串,并返回一个列表。如果一个都没有匹配上,则返回空列表。

#匹配字符串中的所有数字
re.findall('[0-9]',"My name is pan.I'm 30 years old.I have 7 tasks to do.")

输出:
[‘3’, ‘0’, ‘7’]

3、re.match()
与re.search()的区别在于,search()函数匹配整个字符串,而match()函数从字符串的起始位置开始匹配。

re.match(r'9','hello,9mynmaeis')#从起始位置开始匹配,匹配不成功,无返回值
re.search(r'9','hello,9mynmaeis')#匹配整个字符串,匹配成功

输出:<re.Match object; span=(6, 7), match=‘9’>

re.match(r'hello','hello,9mynmaeis')#从起始位置开始匹配,匹配成功

输出:<re.Match object; span=(0, 5), match=‘hello’>

4、finditer()
在字符串中返回正则表达式所匹配的的所有子串,并返回一个re.Match object对象。

iter=re.finditer('[0-9]',"My name is pan.I'm 30 years old.I have 7 tasks to do.")
for i in iter:
    print(i)

输出:
<re.Match object; span=(19, 20), match=‘3’>
<re.Match object; span=(20, 21), match=‘0’>
<re.Match object; span=(39, 40), match=‘7’>

5、re.sub()
替换正则表达式所匹配到的所有子串
re.sub(pattern,repl, string, count=0, flags=0)
pattern:必选参数,需要替换掉的值,可以是特定值也可以是正则表达式
repl:必选参数,替换值
string:必选参数,需要执行替换操作的字符串
count:可选参数,替换次数,默认为值为0,替换掉所有符合条件的值
flags:可选参数,编译标志。(这个参数没有去深入了解,目前默认值是够用的)

re.sub('[0-9]','','hello,my name5 is pan8',count=0)

输出:
‘hello,my name is pan’

re.sub('[0-9]','','hello,my name5 is pan8',count=1)

输出:
‘hello,my name is pan8’

6、re.split()
以正则表达式作为分隔符将字符串分割,返回列表

re.split(',','hello,my name is pan')

输出:
[‘hello’, ‘my name is pan’]

三、常用通配符wild-card
1、.:匹配任何字符
2、*:重复一个字符大于等于0次
3、+:重复一个字符大于等于1次
4、^:匹配一行字符的开头
$:匹配一行字符的结尾

re.findall('^X.*','X-man ')

输出:[‘X-man’]

5、\s:匹配空格
6、\S:匹配非空格字符

re.findall('^X-\S+','X-DSPAM-RESULT:Inmocent')#匹配字符串:以X-开头且X-后为非空格

输出:[‘X-DSPAM-RESULT:Inmocent’]

re.findall('^X-\S+','X-Plane is')

输出:[‘X-Plane’]
7、列表
(1)[12]:匹配指定的单个数字

re.findall('[12]','my favorite 2 number is 2 and 19')

输出:[‘2’, ‘2’, ‘1’]

(2)[0-9]:匹配0-9任意单个数字

re.findall('[0-9]','my favorite 2 number is 2 and 19')

输出:[‘2’, ‘2’, ‘1’, ‘9’]
(3)[abc]:匹配指定的单个小写字母

re.findall('[fa]','my favorite 2 number is 2 and 19')

输出:[‘f’, ‘a’, ‘a’]
(4)[MF]:匹配指定的单个大写字母

re.findall('[MF]','My Favorite 2 Number Is 2 And 19')

输出:[‘M’, ‘F’]
(5)[a-z]:匹配任意单个小写字母
[A-Z]:匹配任意单个大写字母
[a-zA-Z]:匹配任意单个大小写字母
[a-zA-Z0-9]:匹配任意单个数字、任意单个大小写字母

s='we just received $5.5'
re.findall('\$[0-9.]+',s)#[0-9.]匹配0-9任意数字及小数点,因为$是系统中已定义的通配符,此处使用转义字符\。

输出:[’$5.5’]

四、正则表达式中括号的使用:只返回括号中正则表达式匹配到的子串
1、没有括号:

#匹配到以From+空格开始的行,并在该行取值邮箱
s='From pan.zhou@163.com'
re.findall('^From \S+@\S+',s)

输出:
[‘From pan.zhou@163.com’]

2、加上括号
加上括号之后,意为只返回括号中正则表达式匹配到的子串

#匹配以From开始的行,并取值邮箱
s='From pan.zhou@163.com'
re.findall('^From (\S+@\S+)',s)

输出:
[‘pan.zhou@163.com’]

五、贪婪匹配与非贪婪匹配
1、贪婪匹配:取最长的匹配子串

s='From:Using the:characters'
re.findall('^F.+:',s)

输出:[‘From:Using the:’]
2、非贪婪匹配:取最短的匹配子串
在正则表达式中使用?,达到非贪婪匹配效果

s='From:Using the:characters'
re.findall('^F.+?:',s)

输出:[‘From:’]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值