一、正则表达式作用
文本信息中提取指定数据时可以用正则表达式解决,用以 匹配文本内容,python中需通过re模块完成功能调用。
例如:
import re
if __name__ == "__main__":
text = "我是一个牛人,你是谁,是都比都比么?"
count = re.findall("都比", text)
print(count)
print(len(count))
二、正则之文本相关
- re.findall(“匹配内容”,“文本”)
功能:匹配全内容,用于计算出现次数 得到一个list
import re
if __name__ == "__main__":
text = "我是一个牛人,你是谁,是都比都比么?"
count = re.findall("都比", text)
print(count)
print(len(count))
# print(text.count("都比"))
>>>["都比","都比"]
>>>2
- [abc]
功能:匹配a或b或c字符,得到一个list
text1="dfadcvewrfdfkhkjhhjk"
data_list = re.findall('f[abcd]',text1) # f[abcd]指固定搭配fa或fb或fc在文本中出现的内容列表
print(data_list)
>>>['fa', 'fd']
- [^abc]
功能:匹配除了abc以外的所有字符,并逐个分裂后以list存储
text1="dfadcvewrfdfkhkjhhjk"
data_list = re.findall('[^abcd]',text1)
print(data_list)
>>>['f', 'v', 'e', 'w', 'r', 'f', 'f', 'k', 'h', 'k', 'j', 'h', 'h', 'j', 'k']
- [a-z]
功能: 匹配a到z的任意字符 [0-9] 匹配0~9任意字符 得到一个列表
text1="dfadcvewrfdfkhkjhhjk"
data_list = re.findall('[a-d]',text1)
print(data_list)
>>>['d', 'a', 'd', 'c', 'd']
- “.”
功能:"."代指任意一个字符(不包括换行符);“.+”贪婪匹配(从头至尾的内容),“.?+”非贪婪匹配
text1="dfadcvewrfdfkhkacjhhjk"
data_list = re.findall('a.c',text1) # a.c中.代表一个字符进行匹配,eg:"adgc"/"ac"均无法匹配
print(data_list)
>>>['adc']
text1="dfadcvewrfdfkhkacjhhjk"
data_list = re.findall('a.+c',text1) # a.c中.+代表贪婪匹配(默认)
print(data_list)
>>>['adcvewrfdfkhkac']
text1="dfadcvewrfdfkhkabqcjhhjk"
data_list = re.findall('a.+?c',text1) # a.c中.?+代表非贪婪匹配
print(data_list)
>>>['adc', 'abqc']
- “\w”
功能:"\w"代指 字母 或 数字 或 下划线(汉字)中任意1个字符
text1="我是一个牛人1, 1你是谁1,是???都比sdfa都比么?"
data_list = re.findall('\w\w1+,',text1)
print(data_list)
>>>['牛人1,', '是谁1,']
- “\d”
功能:"\d"代指任意1个数字 "\d+"代指任意多个数字
text1="我是一个牛人1, 1你是谁1.021,是???都比sdfa都比么?"
data_list = re.findall('\w\d',text1)
print(data_list)
>>>['人1', '谁1', '02']
- “\s”
功能:"\s"代指任意的空白符,包括空格、制表符等
text1 = "我是一个牛人1 1你是谁1.021,是???都比sdfa都比么?"
data_list = re.findall('\w+\s+', text1)
print(data_list)
>>>['我是一个牛人1 ']
三、正则之数学相关
作用:与文本相关字符合用代表出现多少次
1."*"
*功能:*代表重复出现0次或更多次
text1 = "我是一个牛人,我的qq是12234331,我的邮箱是12234331@qq.com,手机号是18623832501"
data_list = re.findall("是12*", text1) # "是1"是固定搭配,"2*"表示2可以出现0次或多次
print(data_list)
>>>['是122', '是122', '是1']
- “+”
功能:+代表重复出现1次或更多次
text1 = "我是一个牛人,我的qq是1234331,我的邮箱是1234331@qq.com,手机号是18623832501"
data_list = re.findall("\d+2", text1) # "\d+2"中"2"是固定搭配,"\d+"代表数字可以出现1次或多次
print(data_list)
>>>['12', '12', '18623832']
- “?”
功能:?指示重复0次或1次,多用于非贪婪匹配中
text1 = "我是一个牛人,我的qq是1234331,我的邮箱是1234331@qq.com,手机号是18623832501"
data_list = re.findall("是\d?2", text1) # "是\d?2"中"是"、"2"是固定搭配,"\d?"代表数字可以出现0次或1次
print(data_list)
>>>['是12', '是12']
- {n}
功能:{n}代指重复出现n次
text1 = "我是一个牛人,我的qq是12234331,我的邮箱是12234331@qq.com,手机号是18623832501"
data_list = re.findall("是12{0}", text1)
print(data_list)
>>>['是1', '是1', '是1']
text1 = "我是一个牛人,我的qq是12234331,我的邮箱是12234331@qq.com,手机号是18623832501"
data_list = re.findall("是12{2}", text1)
print(data_list)
>>>['是122', '是122']
- {n,}
功能:代指出现n次或更多次
text1 = "我是一个牛人,我的qq是12234331,我的邮箱是12234331@qq.com,手机号是18623832501"
data_list = re.findall("是12{0,}", text1)
print(data_list)
>>>['是122', '是122', '是1']
- {n,m}
功能:{n,m}指示重复出现n-m次
text1 = "我是一个牛人,我的qq是12234331,我的邮箱是12234331@qq.com,手机号是18623832501"
data_list = re.findall("是12{0,1}", text1)
print(data_list)
>>>['是12', '是12', '是1']
四、正则之括号分组
作用:匹配成功后输出括号中的内容
text1 = "我是一个牛人,我的qq是12234331,我的邮箱是12234331@qq.com,手机号是186****2501"
data_list = re.findall("是186\d{8}", text1)
print(data_list)
>>>['是186****2501']
text1 = "我是一个牛人,我的qq是12234331,我的邮箱是12234331@qq.com,手机号是186****2501"
data_list = re.findall("是186(\d{8})", text1)
print(data_list)
>>>['****2501']
- 获取指定区域 + 或"|"条件
text1 = "我是一个牛人,我的qq是12234331,我的邮箱是12234331@qq.com,手机号是18623832501,手机号是18623832502"
data_list = re.findall("是(122\d{5}|是(186{8}))", text1)
print(data_list)
>>>