赞
踩
# 行定位符"^"表示行的开始,"$"表示行的结尾 ^tm tm$ tm表示出现在任意部分
# 元字符 ^ $ \bmr\w*\b 匹配以字母mr开头的单词,先是从某个单词单词开始处(\b),然后匹配字母mr,接着是任意数量的字母或数字(\w*),最后是单词结束处(\b)
# 该正则表达式可以匹配“mrsoft”"mrbook""mr123456"
代码 | 说明 |
---|---|
. | 匹配换行字符以外的的任意字符 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
# 限定符 (指定数字和字符) 匹配8位QQ号
^\d{8}$
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5MOs6JpR-1648451110410)(E:\笔记\python\image-20211024233548191.png)]
如果要匹配没有预定义元字符的字符集合(比如元音字母a,o,e,i,u):只需要在方括号里列出它们
[aeiou] #匹配任意一个元音字母
[.?!] #匹配标点符号. ? !
[0-9] #与\d完全一样 代表一位数字
[a-z0-9A-Z] #完全等同于\w(只考虑英文的话)
*说明:
[\u4e00-\u9fa5] #如果想要匹配给定字符串中的任意一个汉字,可以使用
[\u4e00-\u9fa5]+ #匹配连续多个汉字
匹配不符合指定字符集合的字符串 ^放入[ ]
[^a-zA-Z] #匹配一个不是字母的字符
如何匹配身份证号?身份证号规则:身份证号码长度为15或18位;15位全部为数字;18位,前17位为数字最后一位为校验位,可能为数字或X 则需使用逻辑选择字符(| 或)来实现
(^\d{15}$)|(^\d{18})|(^\d{17})(\d|X|x)$
与python一致,都是将特殊字符变为普通字符如(“.” “?” " \ "等)
例:127.0.0.1
[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} #匹配IPV4地址
小括号()的作用:1.改变限定符的作用如 | * ^ 2.分组
(thir|four)th #匹配单词thirth或fourth
(\.[0-9]{1,3}){3} #对分组(\.[0-9]{1,3})进行重复操作
在python中使用正则表达式时,是将其作为模式字符串使用
例1:匹配不是字母的一个字符的正则表达式表示为模板字符串
'[^a-zA-Z]'
例2:匹配以字母m开头的单词的正则表达式转换为模式字符串 *则不能在其两测添加引号定界符
需要将“ \ ”进行转义
'\\bm\\w*\\b'
**由于模式字符串不能包含大量的特殊字符和反斜杠,所以需要写为原生字符串,即在模式字符串前加r或R
r'\bm\w*\b' #\b表示字母的开始或结束
在python中提供了 re 模块用于实现正则表达式的操作
re提供的方法:search() match() findall() 还可以先使用re模块的compile()方法将模式字符串转换为正则表达式对象,然后使用该正则表达式对象的相关方法来操作字符串
#引入re模块
impotr re
用于从字符串的开始进行匹配,在起始位置匹配成功返回Match对象,否则返回None
语法格式:
re.match(pattern,string,[flags])
# pattern:模式字符串
# String:要匹配的字符串
# flags:标志位,可选参数
常用标志位
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aZ3HRilg-1648451110412)(E:\笔记\python\IMG_20211025_153321.jpg)]
例1: # 搜索第一个以"mr_"开头的字符串,不区分大小写
pattern = r'mr_\w+'
string = 'MR_SHOP mr_shop'
match = re.search(pattern, string, re.I) #re.I 不区分大小写 默认区分大小写
print(match)
string = '项目名称 MR_SHOP mr_shop'
match = re.search(pattern, string)
print(match)
运行结果:
<re.Match object; span=(0, 7), match='MR_SHOP'> <re.Match object; span=(5, 12), match='MR_SHOP'>
例2:# 验证是否出现危险字符
pattern = r'(黑客)|(抓包)|(监听)|(Trojan)'
about = '我是一名程序员,我喜欢看黑客方面的书,想研究一下Trojan'
match = re.search(pattern, about)
# match = re.match(pattern, about) match()方法在开始处匹配
print(match)
if match is None:
print(about, '@ 安全!')
else:
print(about, '@ 出现危险词汇!')
about = '我是一名程序员,我喜欢看计算机网络方面的书,喜欢开发网站'
match = re.match(pattern, about)
if match is None:
print(about, '@ 安全!')
else:
print(about, '@ 出现了危险词汇!')
运行结果
<re.Match object; span=(12, 14), match='黑客'> 我是一名程序员,我喜欢看黑客方面的书,想研究一下Trojan @ 出现危险词汇! 我是一名程序员,我喜欢看计算机网络方面的书,喜欢开发网站 @ 安全!
例3:# 使用Match对象的start(),end():获取匹配值的开始和结束位置 span():返回匹配位置的元组
pattern = r'mr_\w+'
string = 'MR_SHOP mr_shop'
match = re.match(pattern, string, re.I)
print('匹配起始位置:', match.start())
print('匹配字符串的结束位置', match.end())
print('匹配位置的元组', match.span())
print('要匹配的字符串', match.string)
print('匹配数据', match.group())
# 邮箱匹配
regex = r"^[0-9a-zA-Z]+@[0-9a-zA-Z]+([0-9a-zA-Z]+\.)*\.[0-9a-zA-Z]{2,6}$"
string = '1410047264@qq.com'
match = re.search(regex, string)
print(match)
运行结果
匹配起始位置: 0 匹配字符串的结束位置 7 匹配位置的元组 (0, 7) 要匹配的字符串 MR_SHOP mr_shop 匹配数据 MR_SHOP <re.Match object; span=(0, 17), match='1410047264@qq.com'>
例4:# 验证输入的手机号是否合法
# 匹配手机号
pattern = r'(13[4-9]\d{8})$|(15[01289]\d{8})$'
mobile = '13690980328'
match = re.match(pattern, mobile)
if match is None:
print(mobile, '非法手机号')
else:
print('合法')
在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回,空则返回空列表
**语法格式:re.findall(pattern,string,[flags])
运行结果
['MR_SHOP','mr_shop']
['mr_shop']
例:匹配URL
pattern = r'([1-9]{1,3}(\.[0-9]{1,3}){3})'
url = '127.0.0.1 192.168.1.66'
match = re.findall(pattern, url)
for item in match:
print(item[0])
127.0.0.1 192.168.1.66
# 语法格式 re.sub(pattern,repl,string,count,flags)
# repl:表示替换的字符串
# count:表示模式匹配后替换的最大次数,默认为零
pattern = r'1[34578]\d{9}'
string = '中奖号码为:84978981 联系电话: 13609580328'
result = re.sub(pattern, '136xxxxxxxx', string)
print(result)
例1:
# 语法格式re.split(pattern,string,[maxsplit],[flags])
# maxsplit:表示最大的拆分次数
pattern = r'[?|&]'
url = 'http://www.baiddu.com/login.jsp?username="mr"&pwd="mrsoft"'
result = re.split(pattern, url)
print(result)
运行结果:
['http://www.baiddu.com/login.jsp', 'username="mr"', 'pwd="mrsoft"']
例2:
str1 = '@尚奎 @用户名 @密码'
pattern = r'\s*@'
list1 = re.split(pattern, str1)
print("list1:")
for i in list1:
if i != "":
print(i)
list1: 尚奎 用户名 密码
attern, url)
print(result)
运行结果:
`['http://www.baiddu.com/login.jsp', 'username="mr"', 'pwd="mrsoft"']`
例2:
```python
str1 = '@尚奎 @用户名 @密码'
pattern = r'\s*@'
list1 = re.split(pattern, str1)
print("list1:")
for i in list1:
if i != "":
print(i)
list1: 尚奎 用户名 密码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。