Python全栈开发实战学习8

re模块

findall

功能:返回满足匹配条件的结果,并放在列表里

import re

ret = re.findall('[a-z]+', "eva egon yuan")
print(ret)


结果
['eva', 'egon', 'yuan']

search

功能:从前往后找到一个就返回,返回的变量需要调用group函数才能拿到结果,如果没有找到那么返回None,调用group会报错。

import re

ret = re.search('e',"eva egon yuan")
print(ret)
print(ret.group())


结果
<re.Match object; span=(0, 1), match='e'>
e
import re

ret = re.search('j',"eva egon yuan")
print(ret)
print(ret.group())


结果
Traceback (most recent call last):
None
  File "E:/re模块.py", line 12, in <module>
    print(ret.group())
AttributeError: 'NoneType' object has no attribute 'group'

match

功能:从头开始匹配,如果正则规则从头可以匹配上,就返回一个变量。匹配的内容需要用group才能显示,如果没有匹配上就返回None,调用group时会报错。

import re

ret = re.match('ev', "eva egon yuan")
print(ret)
print(ret.group())


结果
<re.Match object; span=(0, 2), match='ev'>
ev

split

功能:按照正则规则依次分割字符串

import re

ret = re.split('[ab]', 'abcd')
# 先按a进行分割,得到''和'bcd',再按b进行分割,得到''和'cd'
print(ret)  #['','','cd']


结果
['', '', 'cd']

sub

功能:替换

import re
ret = re.sub('\d','H','sdd21vs2sdfe5',1)
# 将sdd21vs2sdfe5中的数字替换成H,只替换1次
print(ret)

结果
sddH1vs2sdfe5
import re
ret = re.sub('\d','H','sdd21vs2sdfe5')
# 将sdd21vs2sdfe5中的数字替换成H
print(ret)

结果
sddHHvsHsdfeH

subn

功能:替换并返回替换次数

import re
ret = re.subn('\d','H','sdd21vs2sdfe5')
print(ret)

结果
('sddHHvsHsdfeH', 4)

compile

功能:将正则表达式编译为一个正则表达式对象,以便反复使用

import re
obj = re.compile('\d{3}')
# 将正则表达式编译为一个正则表达式对象,,规则要匹配的是3个数字
ret = obj.search('sdf44sdf123fwf')
print(ret.group())
ret = obj.search('sd569fwf13')
print(ret.group())

结果
123
569

finditer

功能:将结果以迭代器形式返回

import re
ret = re.finditer('\d', 'sd1f2ds1f3s13df21')
# print(next(ret).group())
# print(next(ret).group())
# print(next(ret).group())
for i in ret:
    print(i.group())

结果
1
2
1
3
1
3
2
1

注意

findall的优先级查询

findall会优先把匹配结果的分组里内容返回,如果想要匹配结果,取消权限即可(?:)

import re
ret = re.findall('www.(baidu|google).com', 'www.baidu.com')
print(ret)
ret = re.findall('www.(?:baidu|google).com', 'www.baidu.com')
print(ret)

结果
['baidu']  
['www.baidu.com']

split的优先级查询

没有()的没有保留匹配上的项,有()的保留了匹配上的项

import re
ret = re.split('\d', 'eva3egon4yuan')
print(ret)
ret = re.split('(\d)', 'eva3egon4yuan')
print(ret)
ret = re.split('(?:\d)', 'eva3egon4yuan')
print(ret)

结果
['eva', 'egon', 'yuan']
['eva', '3', 'egon', '4', 'yuan']
['eva', 'egon', 'yuan']

正则表达式

参考:http://www.cnblogs.com/Eva-J/articles/7228075.html#_label10

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值