python3.正则表达式的使用

正则表达式re.findall、re.sub

#导入第三方包

import re

# 提取出字符中的python子串

s = '通过几天python的学习,感觉python真是好'

re.findall('python',s)

['python', 'python']
s1 = '此次新朗逸主要搭载了1.5L和1.5T发动机,别克英朗搭载了1.0T和1.3L的发动机'

re.findall('1...', s1)
re.findall('1\...', s1)
['1.5L', '1.5T', '1.0T', '1.3L']
几种字符的表示
# 反斜杠\
# 表示转义符,用于转换含义的符号
# \n:指代换行
# \t:指代Tab制表符
# \d:指代0-9中的任一数字
# \s:指代任一种空白(如空格、Tab、换行等)
# \w:指代字母、数字和下划线中的任意一种
# \.:指代句号点本身
# \\:指代斜杠本身
# 剔除字符中所有空白

s3 = ' 距离2019北京马拉松, \n今年报名人数,\t媒体公布的中签, 再创历史新低。\n'

print(s3)

re.sub('\s','',s3) #将\s替换为空字符''
 距离2019北京马拉松, 
今年报名人数,	媒体公布的中签, 再创历史新低。


'距离2019北京马拉松,今年报名人数,媒体公布的中签,再创历史新低。'
中括号[]特定字符匹配
#当需要特定字符匹配是,可以选择中括号[]
# 取出手机号信息
import re

s4 = '用户联系方式:13612345566,用户编号为11011254321'
print(re.findall('1[356789]\d\d\d\d\d\d\d\d\d', s4))
re.findall('1[356789]\d{9}', s4)
['13612345566']

['13612345566']
s5 = '通过对比1.5L和1.5T数据在1.5年的行驶中,发现1.5T口碑比较好'
re.findall('1.5[TL]', s5)
['1.5L', '1.5T', '1.5T']
s5 = '通过对比1.5L和1.5T数据在1.5年的行驶中,发现1.5T口碑比较好'
re.findall('1.5[A-Za-z]', s5)
['1.5L', '1.5T', '1.5T']
圆括号抠出
#提取出用户年龄  圆括号()抠出
s6 = 'id:1, name:jim, age:3, id:2, name:jonh, age:4'

print(re.findall('\d', s6))
print(re.findall('age:\d', s6))
re.findall('age:(\d)', s6)
['1', '3', '0', '2', '4']
['age:3', 'age:4']

['3', '4']
英文状态问号?
# 英文状态问号?  匹配前一个字符0次或1次
s6 = 'id:1, name:jim, age:30, id:2, name:jonh, age:4'

re.findall('age:(\d\d?)', s6)
['30', '4']
英文状态加号+
#英文状态加号+ 匹配前一个字符1次及以上
#星号* 匹配前一个字符0次及以上

#提取出产品名称中包含奶粉字样的产品

prod = ['婴儿袜', '奶粉盒子', '婴儿奶粉', '好奶粉杯子', '纸尿布']
res = []
for i in prod:
    res.extend(re.findall('.*奶粉.*',i))
res
['奶粉盒子', '婴儿奶粉', '好奶粉杯子']
英文状态{}
#英文状态{} 表示匹配前一个字符特定次数或范围

# {m}:匹配前一个字符m次
# {m,}:匹配前一个字符至少一次
# {m, n}:匹配前一个字符至少m次
# {, n}:匹配前一个字符至多n次
.*?万能匹配
#提取出所有天气状态  .*?万能匹配可以解决绝大部分问题
string1 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'轻度污染'},{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'}"

re.findall("tianqi:'(.*?)'", string1)
['晴', '阴~小雨', '小雨~中雨', '中雨~小雨']
re.I不区分大小写
# 取出所有含O字母的单词
string2 = 'Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration and enterprise'
print(re.findall('\w*[oO]\w*', string2))
re.findall('\w*o\w*', string2, flags = re.I)   #re.I不区分大小写
['Together', 'discovered', 'only', 'to', 'competition', 'Our', 'celebration']

['Together', 'discovered', 'only', 'to', 'competition', 'Our', 'celebration']
# 将标点符号,数字和字母删除
string3 = '据悉, 这次发送的4台整齐(ITEB) 项目的设备,先后完成、真空、氮气、前进、吊耳、叠加是哑巴。'
print(re.sub('[,。、\s()a-zA-Z0-9]', '', string3))
据悉这次发送的台整齐项目的设备先后完成真空氮气前进吊耳叠加是哑巴
分割split
# 将每一部分的内容分割
string4 = '2室2庭 | 101.62平 | 低区/7层 | 朝南 \n 上海未来 - 浦东 - 晋阳 - 2005年建设'
split = re.split('[\|\n-]',string4)
print(split)

split_strip = [i.strip() for i in split]
print(split_strip)
['2室2庭 ', ' 101.62平 ', ' 低区/7层 ', ' 朝南 ', ' 上海未来 ', ' 浦东 ', ' 晋阳 ', ' 2005年建设']
['2室2庭', '101.62平', '低区/7层', '朝南', '上海未来', '浦东', '晋阳', '2005年建设']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值