活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
目录
1、split()方法用于实现根据正则表达式分割字符串,并以列表的形式返回。
3、场景模拟:微博的@好友栏目中同时@几位好友,输出被@的好友的名称。
Python提供re模块,用于实现正则表达式操作。在实现时,可以使用re模块提供的方法(如search()、match()、findall()等)进行字符串处理,也可以先用re模块的compile()方法将模式字符串转换为正则表达式对象,再用正则表达式对象的相关方法来操作字符串。
使用re模块时,需先import引入
import re
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 不是有效的中国移动手机号码。
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。 ,出现了危险词汇!
- 真墨迹。是 安全!
findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,返回包含匹配结构的列表,否则返回空列表。
re.findall(pattern, string, [flags])
re.I:不区分字母大小写。
re.A:让\w不匹配汉字。
参数说明:
pattern:表示模式字符串,由要匹配的正则表达式转换而来。
string:表示要匹配的字符串。
flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。
re.sub(pattern, repl, string, count, flags)
re.I:不区分字母大小写。
re.A:让\w不匹配汉字 。
参数说明
pattern:表示模式字符串,由要匹配的正则表达式转换而来。
repl:表示替换的字符串。
string:表示要匹配的字符串。
count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配。
flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。
import re pattern=r'1[34578]\d{9}' #定义要替换的字符串模式 string='中奖号码是:84978981 联系电话是:1361111111' result=re.sub(pattern,'1XXXXXXXXXX',string)#替换字符串 print(result)结果
中奖号码是:84978981 联系电话是:1361111111
import re pattern = r'(黑客)|(抓包)|(监听)|(Trojan)' # 模式字符串 about = 'Trojan。' sub = re.sub(pattern,'@_@',about) # 进行模式替换 print(sub) about = '我是一名程序员。' sub = re.sub(pattern,'@_@',about) # 进行模式替换 print(sub)结果
@_@。 我是一名程序员。
re.split(pattern, string, [maxsplit], [flags])
re.I:不区分字母大小写。
re.A:让\w不匹配汉字。
参数说明
pattern:表示模式字符串,由要匹配的正则表达式转换而来。
string:表示要匹配的字符串。
maxsplit:可选参数,表示最大的拆分次数。
flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。
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"']
import re str1 = '@张三 @李四 @王五麻子' pattern = r'\s*@' list1 = re.split(pattern,str1) # 用空格和@或单独的@分割字符串 print('您@的好友有:') for item in list1: if item != "": # 输出不为空的元素 print(item) # 输出每个好友名结果
您@的好友有: 张三 李四 王五麻子