1.正则表达式30分钟入门教程
定义:正则表达式是筛选符合规则的字符串的一个式子,使用它可以查找符合某些复杂规则的字符串。
举例:设置密码时规定的“需要含有字母、数字”等等就可以通过设置正则表达式进行匹配,防止用户设置不符合规定的密码。
在线正则表达式测试工具:
*常用的元字符
*常用的限定符
*字符转义
eg: \\ = \
*字符类
[aeiou] 查找有aeiou的字符
[a-z0-9] 查找a-z的字母或0-9的数字
*分枝条件
符号:前条件|后条件
判断方法:从左至右依次匹配,成功则停止
*分组
(正则表达式){次数}(正则表达式)
*常用的反义代码
*后向引用与零宽断言
*贪婪与懒惰
# 正则表达式匹配时,通常在满足条件的前提下匹配尽可能多的字符。
*处理选项
(.Net环境下)
*平衡组/递归匹配
(处理括号左右数量不相等的情况)
利用的是堆栈的思想。
*其他语法
参考文档
2.Python中用于正则表达式处理的Re模块
其中flags是处理选项:
实例1:验证输入用户名和QQ号是否有效并给出对应的提示信息。
'''
验证输入用户名和QQ号是否有效并给出对应的提示信息
要求:用户名必须由字母、数字或下划线构成且长度在6~20个字符之间,QQ号是5~12的数字且首位不能为0
'''
import re
def main():
username = input('输入用户名:')
qq = input('请输入QQ号:')
# match函数的第一个参数是正则表达式字符串或正则表达式对象
# 第二个参数是要跟正则表达式做匹配的字符串对象
m1 = re.match(r'^[0-9a-zA-Z_]{6,20}$', username)
if not m1:
print('请输入有效的用户名')
m2 = re.match(r'^[1-9]\d{4-11}$', qq)
if not m2:
print('请输入有效的QQ号')
if m1 and m2:
print('你输入的信息是有效的!')
if __name__ == '__main__':
main()
实例2:从一段文字中提取出国内手机号码。
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())
if __name__ == '__main__':
main()
ex:其中的group()函数用来用来提出分组截获的字符串
实例3:替换字符串中的不良内容
import re
def main():
sentence = '你丫是傻叉吗? 我操你大爷的. Fuck you.'
purified = re.sub('[操肏艹]|fuck|shit|傻[比屄逼叉缺吊屌]|煞笔',
'*', sentence, flags=re.IGNORECASE)
print(purified) # 你丫是*吗? 我*你大爷的. * you.
if __name__ == '__main__':
main()
实例4:拆分长字符串
import re
def main():
poem = '窗前明月光,疑是地上霜。举头望明月,低头思故乡。'
sentence_list = re.split(r'[,。, .]', poem)
while '' in sentence_list:
sentence_list.remove('')
print(sentence_list) # ['窗前明月光', '疑是地上霜', '举头望明月', '低头思故乡']
if __name__ == '__main__':
main()
ex:Beautiful Soup或Lxml作为爬虫时匹配字符串的库也很好用。