版权声明:公众号:Fresh Site。QQ群:690274159。转载我的博文时,请附上转载地址,谢谢!^_^我是嘻哈程序猿freshman。 https://blog.csdn.net/wuhongxia29/article/details/90713626
参考资料:Python-100-Days
Day12 字符串和正则表达式
参考资料:
正则表达式30分钟入门教程
在线正则表达式测试
科赛
Pythton官方文档-正则
使用正则表达式
相关知识
定义:工具,字符串匹配模式。
正则思维导图
特殊字符:转义,例:小数点\.,圆括号\(和\)
Python对正则的支持
re模块
例子
1.验证用户名和QQ
验证输入用户名和QQ号是否有效并给出对应的提示信息
要求:用户名必须由字母、数字或下划线构成且长度在6-20个字符之间,QQ号是5-12的数字且首位不能为0
import re
def match_qq_nickname():
"""
验证输入用户名和QQ号是否有效并给出对应的提示信息
要求:用户名必须由字母、数字或下划线构成且长度在6~20个字符之间,QQ号是5~12的数字且首位不能为0
"""
# username = input(str('请输入用户名:'))
username = 'freshman'
# qq = input('请输入QQ:')
qq = '1187206700'
name_match = re.match(r'^[0-9a-zA-Z_]{6,20}$', username)
# name_match = re.match(r'^\w{6, 20}$', username)
qq_match = re.match(r'^[1-9]\d{4,11}$', qq)
# qq_match = re.match(r'^\d{5, 12}$', qq)
if not name_match:
print('无效用户名')
if not qq_match:
print('无效qq')
if name_match and qq_match:
print('你输入的信息有效')
if __name__ == '__main__':
match_qq_nickname()
# 结果
# 你输入的信息有效
2.从一段文字中提取出国内手机号码。
下面这张图是截止到2017年底,国内三家运营商推出的手机号段。
import re
def main():
# 创建正则表达式对象,使用前瞻和回顾来保证手机号前后不应该出现数字
pattern = re.compile(r'(?<=\D)1[34578]\d{9}(?=\D)')
sentence = '''重要的事情说8130123456789遍,我的手机号是13512346789这个靓号,
不是15600998765,也是110或119,王大锤的手机号才是15600998765。'''
# 查找所有匹配并保存到一个列表中
mylist = re.findall(pattern, sentence)
print(mylist)
print('--华丽的分割线--')
# 通过迭代器取出匹配对象并获得匹配的内容
for temp in pattern.finditer(sentence):
print(temp.group())
print('--华丽分割线--')
# 通过search函数指定搜索位置找出所有匹配
m = pattern.search(sentence)
while m:
print(m.group())
m = pattern.search(sentence, m.end())
main()
3.替换字符串中的不良内容
import re
def main():
sentence = '你丫是傻叉吗? 我操你大爷的. Fuck you.'
purified = re.sub('[操丫]|fuck|shit', '*', sentence, flags=re.IGNORECASE)
print(purified)
main()
4.拆分字符串
import re
def main():
poem = '窗前明月光,疑是地上霜。举头望明月,低头思故乡。'
sentence_list = re.split(r'[,。,.]', poem)
while '' in sentence_list:
sentence_list.remove('')
print(sentence_list)
main()