活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
学习日记
目录
1、split()方法用于实现根据正则表达式分割字符串,并以列表的形式返回。
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) # 输出每个好友名
结果
您@的好友有: 张三 李四 王五麻子