栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python正则表达式使用实例_python正则表达式提取字段?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python正则表达式使用实例_python正则表达式提取字段?

一.python 正则表达式
1.元字符
# 行定位符"^"表示行的开始,"$"表示行的结尾 ^tm tm$  tm表示出现在任意部分

# 元字符 ^ $ bmrw*b 匹配以字母mr开头的单词,先是从某个单词单词开始处(b),然后匹配字母mr,接着是任意数量的字母或数字(w*),最后是单词结束处(b)

# 该正则表达式可以匹配“mrsoft”"mrbook""mr123456"
代码说明
.匹配换行字符以外的的任意字符
w匹配字母或数字或下划线或汉字
s匹配任意的空白符
d匹配数字
b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
2.重复
# 限定符 (指定数字和字符) 匹配8位QQ号
^d{8}$
常用限定符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5MOs6JpR-1648451110410)(E:笔记pythonimage-20211024233548191.png)]

3.字符类

如果要匹配没有预定义元字符的字符集合(比如元音字母a,o,e,i,u):只需要在方括号里列出它们

[aeiou]  #匹配任意一个元音字母
[.?!]	#匹配标点符号. ? !
[0-9]	#与d完全一样 代表一位数字
[a-z0-9A-Z]	#完全等同于w(只考虑英文的话)

*说明:

[u4e00-u9fa5]		#如果想要匹配给定字符串中的任意一个汉字,可以使用
[u4e00-u9fa5]+	#匹配连续多个汉字	
4排除字符

匹配不符合指定字符集合的字符串 ^放入[ ]

[^a-zA-Z]	#匹配一个不是字母的字符
5.选择字符

如何匹配身份证号?身份证号规则:身份证号码长度为15或18位;15位全部为数字;18位,前17位为数字最后一位为校验位,可能为数字或X 则需使用逻辑选择字符(| 或)来实现

(^d{15}$)|(^d{18})|(^d{17})(d|X|x)$
6.转义字符

与python一致,都是将特殊字符变为普通字符如("." “?” " "等)

例:127.0.0.1

[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}   #匹配IPV4地址
7.分组

小括号()的作用:1.改变限定符的作用如 | * ^ 2.分组

(thir|four)th	#匹配单词thirth或fourth
(.[0-9]{1,3}){3}	#对分组(.[0-9]{1,3})进行重复操作
8.在python中使用正则表达式语法

在python中使用正则表达式时,是将其作为模式字符串使用

例1:匹配不是字母的一个字符的正则表达式表示为模板字符串

'[^a-zA-Z]'

例2:匹配以字母m开头的单词的正则表达式转换为模式字符串 *则不能在其两测添加引号定界符

需要将“ ”进行转义

'\bm\w*\b'

**由于模式字符串不能包含大量的特殊字符和反斜杠,所以需要写为原生字符串,即在模式字符串前加r或R

r'bmw*b'		#b表示字母的开始或结束
二.使用re模块实现正则表达式操作

在python中提供了 re 模块用于实现正则表达式的操作

re提供的方法:search() match() findall() 还可以先使用re模块的compile()方法将模式字符串转换为正则表达式对象,然后使用该正则表达式对象的相关方法来操作字符串

#引入re模块
impotr re
1.匹配字符串 (1)使用match() search() 方法进行匹配

用于从字符串的开始进行匹配,在起始位置匹配成功返回Match对象,否则返回None

语法格式:

re.match(pattern,string,[flags])
# pattern:模式字符串
# String:要匹配的字符串
# flags:标志位,可选参数

​ 常用标志位

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aZ3HRilg-1648451110412)(E:笔记pythonIMG_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)

运行结果:

例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, '@ 出现了危险词汇!')

运行结果

我是一名程序员,我喜欢看黑客方面的书,想研究一下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

例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('合法')
(2)使用findall()方法进行匹配

在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回,空则返回空列表

**语法格式:re.findall(pattern,string,[flags])

使用findall方法匹配此字符串

运行结果

['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

2.替换字符串 (1)替换字符串 sub()方法 隐藏中奖信息的手机号码
# 语法格式 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)
3.分割字符串 (1)split()根据正则表达式分割字符串并以列表的形式返回

例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: 尚奎 用户名 密码

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786558.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号