Python正则表达式操作(re模块使用篇)

在这里插入图片描述
​ 

活动地址:CSDN21天学习挑战赛

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。

学习日记

目录

学习日记

写在前面(语法篇回顾)

re模块实现正则表达式操作

一、匹配字符串

1、使用match()方法进行匹配

2、使用search()方法进行匹配

3、使用findall()方法进行匹配

二、替换字符串

1、 sub()方法用于实现字符串的替换。

2、隐藏中奖信息中的手机号码。

3、替换出现的危险字符串

三、使用正则表达式分割字符串

1、split()方法用于实现根据正则表达式分割字符串,并以列表的形式返回。

2、从给定的URL地址中提取出请求地址和各个参数。

3、场景模拟:微博的@好友栏目中同时@几位好友,输出被@的好友的名称。


写在前面(语法篇回顾)

    Python提供re模块,用于实现正则表达式操作。在实现时,可以使用re模块提供的方法(如search()、match()、findall()等)进行字符串处理,也可以先用re模块的compile()方法将模式字符串转换为正则表达式对象,再用正则表达式对象的相关方法来操作字符串。

    使用re模块时,需先import引入

import re

re模块实现正则表达式操作

一、匹配字符串

1、使用match()方法进行匹配

re.search(pattern, string, [flags])

re.I:不区分字母大小写

re.A:让\w不匹配汉字 

参数说明:

pattern:表示模式字符串,由要匹配的正则表达式转换而来。

string:表示要匹配的字符串。

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

 

验证输入的手机号是否有效。

import re 

pattern = r'(13[4-9]\d{8})|(15[01289]\d{8})$'
mobile = '12789422222'
match = re.match(pattern,mobile)  # 进行模式匹配
if match == None:  # 判断是否为None,为真表示匹配失败
    print(mobile,'不是有效的中国移动手机号码。')
else:
    print(mobile,'是有效的中国移动手机号码。')
    
mobile = '56842122221'
match = re.match(pattern,mobile)  # 进行模式匹配
if match == None:   # 判断是否为None,为真表示匹配失败
    print(mobile,'不是有效的中国移动手机号码。')
else:
    print(mobile,'是有效的中国移动手机号码。')

结果

12789422222 不是有效的中国移动手机号码。
56842122221 不是有效的中国移动手机号码。

2、使用search()方法进行匹配

        search()方法用于在整个字符串中搜索第一个匹配的值,如果在起始位置匹配成功,则返回Match对象,否则返回None。

re.search(pattern, string, [flags])

re.I:不区分字母大小写。

re.A:让\w不匹配汉字 。

参数说明:

pattern:表示模式字符串,由要匹配的正则表达式转换而来。

string:表示要匹配的字符串。

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

 

验证是否出现危险字符。

import re  

pattern = r'(黑客)|(抓包)|(监听)|(Trojan)'  # 模式字符串

about = 'Trojan。'
match = re.search(pattern,about)  # 进行模式匹配
if match == None:  # 判断是否为None,为真表示匹配失败
    print(about,'安全!')
else:
    print(about,',出现了危险词汇!')
    
about = '真墨迹。是'
match = re.match(pattern,about)  # 进行模式匹配
if match == None:   # 判断是否为None,为真表示匹配失败
    print(about,'安全!')
else:
    print(about,'出现了危险词汇!')

结果

Trojan。 ,出现了危险词汇!
真墨迹。是 安全!

3、使用findall()方法进行匹配

        findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,返回包含匹配结构的列表,否则返回空列表。

re.findall(pattern, string, [flags])

re.I:不区分字母大小写。

re.A:让\w不匹配汉字。

参数说明:

pattern:表示模式字符串,由要匹配的正则表达式转换而来。

string:表示要匹配的字符串。

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

二、替换字符串

1、 sub()方法用于实现字符串的替换。

re.sub(pattern, repl, string, count, flags)

re.I:不区分字母大小写。

re.A:让\w不匹配汉字 。

参数说明

pattern:表示模式字符串,由要匹配的正则表达式转换而来。

repl:表示替换的字符串。

string:表示要匹配的字符串。

count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配。

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

2、隐藏中奖信息中的手机号码。

import re
pattern=r'1[34578]\d{9}'        #定义要替换的字符串模式

string='中奖号码是:84978981   联系电话是:1361111111'

result=re.sub(pattern,'1XXXXXXXXXX',string)#替换字符串

print(result)

结果

中奖号码是:84978981   联系电话是:1361111111

3、替换出现的危险字符串

import re  

pattern = r'(黑客)|(抓包)|(监听)|(Trojan)'  # 模式字符串

about = 'Trojan。'
sub = re.sub(pattern,'@_@',about)  # 进行模式替换
print(sub)
    
about = '我是一名程序员。'
sub = re.sub(pattern,'@_@',about)   # 进行模式替换
print(sub)


结果

@_@。
我是一名程序员。

三、使用正则表达式分割字符串

1、split()方法用于实现根据正则表达式分割字符串,并以列表的形式返回。

re.split(pattern, string, [maxsplit], [flags])

re.I:不区分字母大小写。

re.A:让\w不匹配汉字。

参数说明

pattern:表示模式字符串,由要匹配的正则表达式转换而来。

string:表示要匹配的字符串。

maxsplit:可选参数,表示最大的拆分次数。

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。

2、从给定的URL地址中提取出请求地址和各个参数。

import re  # 导入re模块

pattern = r'[?|&]'  # 定义分隔符

url = 'https://mp.csdn.net/mp_blog/creation/editor/126219921.jsp?username="mr"&pwd="mrsoft"'
    
result = re.split(pattern,url)#分割字符串

print(result)


结果

['https://mp.csdn.net/mp_blog/creation/editor/126219921.jsp', 'username="mr"', 'pwd="mrsoft"']

3、场景模拟:微博的@好友栏目中同时@几位好友,输出被@的好友的名称。

import re
str1 = '@张三 @李四 @王五麻子'
pattern = r'\s*@'
list1 = re.split(pattern,str1)  # 用空格和@或单独的@分割字符串
print('您@的好友有:')
for item in list1:
    if item != "":      # 输出不为空的元素
        print(item)     # 输出每个好友名

结果

您@的好友有:
张三
李四
王五麻子

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉蕤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值