2021-08-21 正则表达式

一、正则表达式作用
文本信息中提取指定数据时可以用正则表达式解决,用以 匹配文本内容,python中需通过re模块完成功能调用。
例如:

import re

if __name__ == "__main__":
    text = "我是一个牛人,你是谁,是都比都比么?"
    count = re.findall("都比", text)
    print(count)
    print(len(count))

二、正则之文本相关

  1. re.findall(“匹配内容”,“文本”)
    功能:匹配全内容,用于计算出现次数 得到一个list
import re

if __name__ == "__main__":
    text = "我是一个牛人,你是谁,是都比都比么?"
    count = re.findall("都比", text)
    print(count)
    print(len(count))
    # print(text.count("都比"))
    >>>["都比","都比"]
    >>>2
  1. [abc]
    功能:匹配a或b或c字符,得到一个list
    text1="dfadcvewrfdfkhkjhhjk"
    data_list = re.findall('f[abcd]',text1)  # f[abcd]指固定搭配fa或fb或fc在文本中出现的内容列表
    print(data_list)
    >>>['fa', 'fd']
  1. [^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']
  1. [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']
  1. “.”
    功能:"."代指任意一个字符(不包括换行符);“.+”贪婪匹配(从头至尾的内容),“.?+”非贪婪匹配
 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']
  1. “\w”
    功能:"\w"代指 字母 或 数字 或 下划线(汉字)中任意1个字符
 text1="我是一个牛人1,  1你是谁1,是???都比sdfa都比么?"
    data_list = re.findall('\w\w1+,',text1)
    print(data_list)
    >>>['牛人1,', '是谁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']
  1. “\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. “+”
    功能:+代表重复出现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']
  1. “?”
    功能:?指示重复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']
  1. {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']
  1. {n,}
    功能:代指出现n次或更多次
    text1 = "我是一个牛人,我的qq是12234331,我的邮箱是12234331@qq.com,手机号是18623832501"
    data_list = re.findall("是12{0,}", text1)
    print(data_list)
    >>>['是122', '是122', '是1']
  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)
    >>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值