python学习自动化任务之模式匹配与正则表达式

python 所有正则表达式
python中所有的正则表达式的函数都在r模块中

  1. 创建正则表达式对象
import re
re.compile(正则表达式字符串)----返回Regex对象
re.compile(r'\d\d\d\d\d')
  1. 匹配Regex对象
    Regex对象的search()方法查找输入的字符串。寻找正则表达式的所有匹配。
Regex=re.compile(r'\d\d\d\d\d')
mo=Regex.search("要查询的字符串")
print(mo)
#mo为匹配对象,
#若未匹配到则返回None
#若匹配到 有.group()方法,返回被查找字符串实际匹配文本
#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'\d\d\d\d')#设置匹配的正则
group=regex_.search("1234asdsd3456 ")
if group==None:
	print("未匹配到")
	pass
else:
	print(group.group())
	print(type(group.group()))
>>>>>>>1234
>>>>>>><class 'str'>
>>>>>>>[Finished in 0.3s]
  1. 利用括号分组
    正则表达式字符串中的第一对括号是第一组,第二对括号是第二组,以此类推。如要匹配电话号码
    内容:regex.groups()返回匹配的元组模式,可以多重复制
    regex.group()返回整体字符串匹配值
#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'(\d\d\d)-(\d\d\d)')#设置匹配的正则
group=regex_.search("123-234-34sadsd ")
if group==None:
	print("未匹配到")
	pass
else:
	print(group.group(1))#group方法中的参数就是 第一个括号里面的匹配到的内容。若要一次性返回所有匹配值,则用groups()方法
	regex1,regex2=group.groups()#使用多重赋值方式获取,返回元祖方式如:('123', '234')
	print(type(group.group()))

  1. 用管道匹配多个分组
    希望匹配许多表达式中的一个,如正则表达式:r"xxx"|“yyy”。匹配xxx或yyy
#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'xxx|yyy')#设置匹配的正则
group=regex_.search("xxx and yyy ")
if group==None:
	print("未匹配到")
	pass
else:
	print(group.group())
>>>>>xxx
返回匹配的xxx或yyy

若需要找到“所有”匹配的地方,可以使用findall()方法,如

#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'ABC(xxx|yyy)')#设置匹配的正则
group=regex_.search("ABCxxx and yyy ")
if group==None:
	print("未匹配到")
	pass
else:
	print(group.group())#返回ABCxxx
	print(group.group(1))#返回xxx
	print(group.groups())#返回('xxx',)

  1. 用问实现可选匹配
    有时候,想匹配的模式是可选的,就是说不论文本自爱不再,正则表达式都会认为匹配。?表明它前面的分组在这个模式中是可选的,如:
#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'ABC(yyy)?')#设置匹配的正则
group=regex_.search("ABCxxx and yyy ")
if group==None:
	print("未匹配到")
	pass
else:
	print(group.group())#返回ABC
	print(group.group(1))#返回None
	print(group.groups())#返回(None,)

  1. 用星号匹配零次或多次
    *表示“匹配零次或多次”,在星号之前的分组,可以在文本中出现任意此,包括0次。或重复 。
#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'ABC(xxx)*')#设置匹配的正则
group=regex_.search("ABCxxxxxxxxxxxx and yyy ")
if group==None:
	print("未匹配到")
	pass
else:
	print(group.group())#返回ABCxxxxxxxxxxxx
	print(group.group(1))#返回xxx
	print(group.groups())#返回('xxx',)

#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'ABC(yyy)*')#设置匹配的正则
group=regex_.search("ABCxxxxxxxxxxxx and yyy ")
if group==None:
	print("未匹配到")
	pass
else:
	print(group.group())#返回ABC
	print(group.group(1))#返回None
	print(group.groups())#返回('None',)

  1. 用加号匹配一次或多次
    +代表匹配“一次或多次”
#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'ABC(yyy)+')#设置匹配的正则
group=regex_.search("ABCxxxxxxxxxxxx and yyy ")
if group==None:
	print("未匹配到")
	pass
else:
	print(group.group())
	print(group.group(1))
	print(group.groups())

>>>>>未匹配到
#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'ABC(yyy)+')#设置匹配的正则
group=regex_.search("ABCyyyyyyyyy and yyy ")
if group==None:
	print("未匹配到")
	pass
else:
	print(group.group())#返回ABCyyyyyyyyy
	print(group.group(1))#返回yyy
	print(group.groups())#返回('yyy',)

  1. 用花括号匹配特定次数
    如果要想一个分组重复特定次数,就在正则表达式中该分组的后面跟上花括号的数字,如:(AB){3},就匹配ABABAB字符串。
#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'(AB){3}')#设置匹配的正则
group=regex_.search("ABABABABAB and yyy ")
if group==None:
	print("未匹配到")
	pass
else:
	print(group.group())#返回ABABAB
	print(group.group(1))#返回AB
	print(group.groups())#返回('AB',)

  1. 贪心匹配和非贪心匹配
#贪心匹配
#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'(AB){2,3}')#匹配2-3个,最大3个
group=regex_.search("ABABABABAB and yyy ")
print(group.group())
#-*-coding:utf-8 -*-
#非贪心匹配
import re #引入正则表达式库
regex_=re.compile(r'(AB){2,3}?')#只匹配2个
group=regex_.search("ABABABABAB and yyy ")
print(group.group())
  1. findall()方法
    findall()返回结果:
    1.如果调用在一个没有分组的表达式上,如\d\d,返回一个字符串列表[‘1221’,‘2121’]
    2.如果调用在一个有分组的表达式中,如()-(),将返回所有匹配的字符串元祖,(‘1212’,‘222’)
  2. 字符串分类
    \d 0 到9的数字
    \D 除0到9数字以外其它字符
    \w 任何字母 数字 或下划线
    \W 上面的反义词
    \s 空格、制表符、换行符
    \S 上面反义词
  3. 插入字符和美元字符
    可以在正则表达式开始处插入符号^,表示匹配必须发送在被查找文本开始处,后面加上$ 表示被查找文本后面
  4. 通配字符
    .它匹配处理换行字符外,所有字符。
    .*是匹配所有字符
    。匹配换行
  5. 不区分大小写匹配
    re.compile(“asdas”,re.I)
    15.用sub()方法替换字符串
#-*-coding:utf-8 -*-
import re #引入正则表达式库
regex_=re.compile(r'\d\d')#设置匹配的正则
# group=regex_.search("as12AasBAB45AB6sa7ABasAB and yyy ")
sd=regex_.sub('xx',"1122")
print(sd)
  1. 管理正则表达式
photoRegex=re.compile(r'''(
(\d{3}|\(\d{3}\))?  #123 or none
(\s|-|\.)? #=  or .  or enter
(\d{3})  #123
(\s|-|\.)  #- 
(\d{4}) # 1234
(\s*(ext|x|ext)\s*(\d{2,5}))? 
	)''',re.VERBOSE)#re.VERBOSE这个必须要
  1. 组合使用
#-*-coding:utf-8 -*-
import re #引入正则表达式库
#IGNORECASW:忽略大小写 VERBOSE 编写注释  
regex_=re.compile(r'\d\d',re.IGNORECASW|re.DOTALLre.VERBOSE)#设置匹
#-*- coding:utf-8 -*-
'''
1.从剪切板中获取文本
2.找出文本所有的电话号码和邮箱地址
3.将他们粘贴到剪贴板
 '''
import re
import pyperclip

photoRegex=re.compile(r'''(
(\d{3}|\(\d{3}\))?  #123 or none
(\s|-|\.)? #=  or .  or enter
(\d{3})  #123
(\s|-|\.)  #- 
(\d{4}) # 1234
(\s*(ext|x|ext)\s*(\d{2,5}))? 
	)''',re.VERBOSE)
emailRegex=re.compile(r'''
(
[a-zA-Z0-9._%+-]+#匹配任意字符串一个或多个
@
[a-zA-Z0-9]+ #用户名
(\.[a-zA-Z]{2,4})
)
	''',re.VERBOSE)
match=[]
text=str(pyperclip.paste())#获取内容
for group in photoRegex.findall(text):
	phone="-".join(group[1],group[2],group[3])
	match.append(phone)
for group in emailRegex.findall(text):
	match.append(group[0])
if len(match)>0:
	pyperclip.copy('\n'.join(match))
	print('\n'.join(match))
else:
	print("not foud phone")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值