Python 编程快速上手-让繁琐工作自动化-正则表达式

重点内容

步骤:
1.用import re 导入正则表达式模块。
2.用re.compile()函数创建一个Regex 对象(记得使用原始字符串)。
3.向Regex 对象的search()方法传入想查找的字符串。它返回一个Match 对象。
4.调用Match 对象的group()方法,返回实际匹配文本的字符串。

import re /首先导入re模块
aa=re.compile(正则表达式) /调用re中的compile函数,创建一个对象aa,eg:phoneNumRegex = re.compile(r’(\d\d\d)-(\d\d\d-\d\d\d\d)’)
mo=aa.search(需要查找的字符串) /匹配字符串进行查找,找到的结果存在mo中,mo = phoneNumRegex.search(‘My number is 415-555-4242.’)
mo.group() /输出匹配的字符串

正则表达式中在前面输入r,可以免去转义
通过在字符串的第一个引号之前加上r,可以将该字符串标记为原始字符串,它不包括转义字符

?:匹配这个问号之前的分组零次或一次 \re.compile(r’\d\d\d-(\d\d)?-\d\d’)
*:(称为星号)意味着“匹配零次或多次”,即星号之前的分组,可以在文本中出现任意次。它可以完全不存在,或一次又一次地重复
+:(加号)则意味着“匹配一次或多次”。星号不要求分组出现在匹配的字符串中,但加号不同,加号前面的分组必须“至少出现一次”。这不是可选的
{}:花括号,如果想要一个分组重复特定次数,就在正则表达式中该分组的后面,跟上花括号包围的数字

常用字符分类的缩写代码
\d 0 到9 的任何数字
\D 除0 到9 的数字以外的任何字符
\w 任何字母、数字或下划线字符(可以认为是匹配“单词”字符)
\W 除字母、数字和下划线以外的任何字符
\s 空格、制表符或换行符(可以认为是匹配“空白”字符)
\S 除空格、制表符和换行符以外的任何字符
[]方括号定义自己的字符分类

作为findall()方法的返回结果的总结,请记住下面两点:
1.如果调用在一个没有分组的正则表达式上,例如\d\d\d-\d\d\d-\d\d\d\d,方法findall()将返回一个匹配字符串的列表,例如[‘415-555-9999’, ‘212-555-0000’]。
2.如果调用在一个有分组的正则表达式上,例如(\d\d\d)-(\d\d\d)-(\d\d\d\d),方法findall()将返回一个字符串的元组的列表(每个分组对应一个字符串),例如[(‘415’,‘555’, ‘1122’), (‘212’, ‘555’, ‘0000’)]。

注意点:

1、? 问号,a.当放在表达式中时可以表示匹配零次或一次,b.或者表示非贪婪模式
2、^ 插入字符,a.当放在方括号的左括号后面,表示“非字符类”。非字符类将匹配不在这个字符类中的所有字符。re.compile(r’[aeiouAEIOU]’);b.当放在正则表达式开始位置时,表明匹配必须发生在被查找文本开始处,re.compile(r’Hello’)
3、a.当用re.compile.search()方法时,获得的是第一个匹配的对象,可以用.group显示对象;b.当采用re.compile.findall()方法时,获得的是一个列表,需要带下标显示。如果在正则表达式中有分组,那么findall 将返回元组的列表。

正则表达式符号复习

 ?匹配零次或一次前面的分组。
匹配零次或多次前面的分组。
 +匹配一次或多次前面的分组。
 {n}匹配n 次前面的分组。
 {n,}匹配n 次或更多前面的分组。
 {,m}匹配零次到m 次前面的分组。
 {n,m}匹配至少n 次、至多m 次前面的分组。
 {n,m}?或
?或+?对前面的分组进行非贪心匹配。
 ^spam 意味着字符串必须以spam 开始。
 spam$意味着字符串必须以spam 结束。
 .匹配所有字符,换行符除外。
 \d、\w 和\s 分别匹配数字、单词和空格。
 \D、\W 和\S 分别匹配出数字、单词和空格外的所有字符。
 [abc]匹配方括号内的任意字符(诸如a、b 或c)。
 [^abc]匹配不在方括号内的任意字符。

主要代码

//# 导入re模块
import re
//# 传入一个正则表达式,创建一个Regex对象*
phoneNumRegex = re.compiler(r'\d{3}')
//# 匹配Regex对象,search()或者findall(),当匹配为0时,search()方法返回//None,不为0时,采用group()方法获得匹配文本*
mo = phoneNumRegex.search('the number is 333')
print(mo.group())
//# 利用括号分组,groups()或group(0)返回整个匹配内容,否则返回不同括号里匹配的内容
phoneNum = re.compile(r'(\d{3})-(\d{3}-\d{4})
mo = phoneNum.search('Phone Number is 434-453-3234.)
mo.groups()
mo.group(1)
mo.group(2)
//#管道|匹配多个分组
hero = re.compile(r'Batman|Tina Fey)
//# ?实现可选匹配,?表示前面的分组可有可无,出现零次或一次
batRegex = re.compile(r'Bat(wo)?man')
//# *匹配零次或多次
batRegex = re.compile(r'Bat(wo)*man')
//# +匹配一次或多次
batRegex = re.compile(r'Bat(wo)+man')
//# {}匹配特定次数,示例表示3到6次之间,包含3和6
haRegex = re.compile(r'(Ha){3,6}')
//# findall返回列表
phoneNum = re.compile(r'(\d{3})-(\d{3}-\d{4})
phoneNum.findall(cell:453-434-4343 work: 989-323-4524)
//# 返回结果['453-434-4343','989-323-4524']
//# []方括号定义自己的字符分类
re.compile(r'[a-z0-9]')
//# 字符分类的左方括号后加入插入字符^.得到“非字符类”,即除这些字符外的其他所有
//# 正则表达式的开始处使用插入符号(^),表明匹配必须发生在被查找文本开始处。正则表达式的末尾加上美元符号($),表示该字符串必须以这个正则表达式的模式结束
stri = re.compile(r'^\d+$')
//# .句点字符称为“通配符”,匹配除换行外的所有字符
//# 贪心模式和非贪心模式
 nongreedyRegex = re.compile(r'<.*?>')
mo = nongreedyRegex.search('<To serve man> for dinner.>')
 mo.group()
'<To serve man>'
greedyRegex = re.compile(r'<.*>')
mo = greedyRegex.search('<To serve man> for dinner.>')
mo.group()
'<To serve man> for dinner.>'
//.*匹配除换行外的所有字符,传入re.DOTALL可以匹配所有字符
newlineRegex = re.compile('.*', re.DOTALL)
//不区分大小写,传入re.IGNORECASE或re.I
robocop = re.compile(r'robocop', re.I)
//忽略正则表达式中的空白符和注释re.VERBOSE
phoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\))? # area code
(\s|-|\.)? # separator
\d{3} # first 3 digits
(\s|-|\.) # separator
\d{4} # last 4 digits
(\s*(ext|x|ext.)\s*\d{2,5})? # extension
)''', re.VERBOSE)
//用sub()方法替换字符串
agentNamesRegex = re.compile(r'Agent (\w)\w*')
agentNamesRegex.sub(r'\1****', 'Agent Alice told Agent Carol that Agent
Eve knew Agent Bob was a double agent.')
'A**** told C**** that E**** knew B**** was a double agent.'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值