正则表达式定义:
正则表达式是指专门用于描述或刻画字符串内在规律的表达式。
反斜杠:表示转义符,用于转换含义的符号。
\n指代换行
\t:指代一个Tab
\d:指代0~9中任意一个数字
\s:指代任意一种空白(如空格、Tab、换行等)
\w:指代字母、数字、和下划线中的任意一种
import re
"""re.findall() 作用:‘查找’ """
# 查找相应的字符
s1 = "通过这几天python的学习,我发现python很简单,很容易上手。"
aa = re.findall("python",s1)
print("aa 的输出结果:%s"%aa)
#' . '查找任意的一个字符(如数字、字母、标点符号、汉字等),但是\n换行符除外(. 相当于通配符)。
s2 = "此次新朗逸搭载了1.5T和1.6L和108T发动机,而宝马搭载了1.4T和1.0L发动机。"
bb1 = re.findall("1...",s2)
bb2 = re.findall("1\...",s2) # 这里面 \ 为转义符号。
print("bb1 的输出结果:{}".format(bb1))
print("bb2 的输出结果:{}".format(bb2))
# 英文状态下的中括号 []:指代字符集合,当需要特定字符匹配时,可以选择中括号
# 注意[]里面的字符集合不能用,等符号分隔。
s3 = "用户联系方式:15289964590,用户编号为11023697843"
#因为电话号码的第二位一般为356789,只有符合这几个数字的才会被提取出来。
cc = re.findall("1[356789]\d\d\d\d\d\d\d\d\d",s3)
print("cc 的输出结果:{}".format(cc))
s4 = "这一次新朗逸搭载了1.5T和1.6L发动机,而宝马搭载了1.4T和1.0L发动机"
dd = re.findall("1\.[0456][TL]",s4)
print("dd 的输出结果:{}".format(dd))
# 英文状态下的圆括号():指代特定内容的截取(抠)。
s5 = "id:1,name:Tom,age:3,gender:1;name:Lily,age:5,gender:0"
#若对\d不加(),则会连age:一起输出,加了()就只会输出相应的数字。
ee1 = re.findall("age:\d",s5)
ee2 = re.findall("age:(\d)",s5)
print("ee1 的输出结果:%s"%ee1)
print("ee2 的输出结果:%s"%ee2)
'''
英文状态下的问号 ?:表示匹配前一个字符1次或0次。
加号 + :匹配前一个字符1次及以上。
星号 * :匹配前一个字符0次或以上。
'''
s6 = ["飞鹤奶粉","奶粉勺","喝奶粉汁汁","磨牙棒","牛奶","粉笔","喜羊羊"]
# 有的“奶粉”在前面,有的在中间,有的在末尾,并且不确定前后有几个其他字符,所以用".*奶粉.*"
ff = []
for i in s6:
ff.extend(re.findall(".*奶粉.*",i))#提取出含有“奶粉”的字符
print("ff 的输出结果:{}".format(ff))
'''
英文状态下的大括号{}:表示匹配前一个字符的特定次数或范围。
{m}:匹配前一个字符m次
{m,}:匹配前一个字符最少m次(>=m)
{m,n}:匹配前一个字符m~n次
{,m}:匹配前一个字符最多m次(<=m)
'''
#所以s3就可以写为:
gg = re.findall("1[356789]\d{9}",s3)
print("gg 的输出结果:%s"%gg)
"""re.sub() 作用:'替换' """
# 剔除字符串中的所有空白,a->b
s7 = "距离2019年北京马拉松开跑只有两周时间了,\t今年北京马拉松报名人数超过16万,\n媒体公布的中签率只有16%左右,再创历史新低。\n"
hh = re.sub("\s","*",s7) #这里是将\t,\n等空白替换成 *
print("hh 的输出结果:%s"%hh)
输出结果:
aa 的输出结果:['python', 'python']
bb1 的输出结果:['1.5T', '1.6L', '108T', '1.4T', '1.0L']
bb2 的输出结果:['1.5T', '1.6L', '1.4T', '1.0L']
cc 的输出结果:['15289964590']
dd 的输出结果:['1.5T', '1.6L', '1.4T', '1.0L']
ee1 的输出结果:['age:3', 'age:5']
ee2 的输出结果:['3', '5']
ff 的输出结果:['飞鹤奶粉', '奶粉勺', '喝奶粉汁汁']
gg 的输出结果:['15289964590']
hh 的输出结果:距离2019年北京马拉松开跑只有两周时间了,*今年北京马拉松报名人数超过16万,*媒体公布的中签率只有16%左右,再创历史新低。*