python中的正则表达式
目录
- 1.正则表达式的简介:
- 01、正则表达式的定义:
- 02、正则表达式的使用场景
- 03、正则表达式的常用函数
- 2.常用的正则符号:
- 3.正则表达式的使用
1.正则表达式的简介:
01、正则表达式的定义:
正则表达式是指专门用于描述或刻画字符串内在规律的表达式
(图片来源网络,侵删)02、正则表达式的使用场景
- 无法通过切片将字符串的子串返回
- 借助于replace方法无法完成非固定值或非固定位置值的替换
- 借助于split方法无法按照多种值实现字符串的分割
03、正则表达式的常用函数
#findall():返回字符串中所有与模式匹配的字符串列表
findall(pattern,string,flags=0) #pattern:指定需要匹配的正则表达式 #string:指定待处理的字符串 #flags:指定匹配模式,常用的可以是re.I,re.M,re.S,re.X; #re.I的模式是让正则表达式对大小写不敏感 #re.M的模式是让正则表达式可以多行匹配 #re.S的模式指明正则符号.可以匹配任意字符,包括换行符\n #re.X模式允许正则表达式可以写的更加详细,如多行表示,忽略空白字符,加入注释等
#sub:用指定的字符串(repl)替换字符串中与模式匹配的项,如果count指定,则替换不超过count次。
sub(pattern,repl,string,count=0,flags=0) #pattern:同findall函数中的pattern #repl:指定替换成的新值 #string:同findall函数中的string #count:用于指定最多替换的次数,默认为全部替换 #flags:同findall函数中的flags
#split():根据正则表达式模式将字符串分割成多个部分,并返回一个包含这些部分的列表
split(pattern,string,maxsplit=0,flags=0) #pattern:同findall函数中的pattern #maxsplit:用于指定最大分割次数,默认为全部分割 #string:同findall函数中的string #flags:同findall函数中的flags
match():尝试从字符串的起始位置匹配一个模式,如果匹配成功则返回匹配对象,否则返回None。
match(pattern, string, flags=0) #pattern:同findall函数中的pattern #string:同findall函数中的string #flags:同findall函数中的flags
2.常用的正则符号:
字符 功能 . 英文状态的句号.指代任意字符(如数字,字母,标点符号,汉字等),但除了换行符\n 反斜杠 表示转义符,用于转换含义的符号 \n 指代换行; \t 指代tab制表符 \d 指代0-9中任一数字 \s 指代任意一种空白(如空格,tab,换行等) \w 指代字母、数字、下划线中的任意一种 . 指代句号点本身(前面加的有反斜杠,显示的问题) [] 英文状态的中括号,指代字符集合,当需要特定字符匹配时,可以选择中括号 () 英文状态的圆括号指定特定内容的截取(抠) ? 英文状态下的问号,表匹配前一个字符0次或1次 + 加号,表示匹配前一个字符1次及以上 * 星号,表示匹配一个字符0次及以上 {} 英文状态下的{},表示匹配前一个字符特定的次数或范围 ^ 匹配字符串开头 $ 匹配字符串结尾 3.正则表达式的使用
01:.*配合使用,提取所有含红的字符串
import re string1 =['小红','红花','绿叶','小桃红','红领巾','落红','紫鸢'] res = [] for i in string1: res.extend(re.findall('.*红.*',i)) print(res) # ['小红', '红花', '小桃红', '红领巾', '落红']
02.反斜杠和.配合使用,提取出动力总成的值
import re # 提取出动力总成的值 s2 = '此次新朗逸主要搭载了1.5L和1.5T两种动力总成的发动机。别克英朗则搭载了1.0T和1.3T的动力总成。' print(re.findall('1\...',s2)) ##一个点是小数点,后面两个点事任意两个字符 # ['1.5L', '1.5T', '1.0T', '1.3T']
03::[]的使用
import re s5 = '通过对比新朗逸1.5L和1.5T两种动力在1.5年行驶期后的数据。发现1.5T的口碑相对较好!' print(re.findall('1.5[a-zA-Z]',s5)) # ['1.5L', '1.5T', '1.5T']
04:()的使用
# 提取出用户的年龄 import re s6 = 'id:1, name:Tom, age:3, gender:1; id:2, name:Lily, age:5, gender:0' print(re.findall('\d',s6)) print(re.findall('age:\d',s6)) print(re.findall('age:(\d)',s6)) #['1', '3', '1', '2', '5', '0'] #['age:3', 'age:5'] #['3', '5']
05:反斜杠和{}配合使用
import re email_list = [ "xiaoWang@163.com" ,"xiaoWang@163.comh" ,".com.xiaowang@qq.com"] for email in email_list: ret = re.match("[\w]{4,20}@(163|126|qq)\.com$", email) #\.代表只是一个点 $代表以xxx结尾的字符串 if ret: print("%s ---是符合规定的邮件地址" % email) else: print("%s ---不符合要求" % email) #xiaoWang@163.com ---是符合规定的邮件地址 #xiaoWang@163.comh ---不符合要求 #.com.xiaowang@qq.com ---不符合要求
06:()提取数据
# 导入用于正则表达式的re模块 import re # 取出字符中所有的天气状态 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:'优'}" print(re.findall("tianqi:'(.*?)'", string1)) # ['晴', '阴~小雨', '小雨~中雨', '中雨~小雨']
07:sub()函数使用
import re string3 = '据悉,这次发运的4台蒸汽冷凝罐属于国际热核聚变实验堆(ITER)项目的核二级压力设备,先后完成了压力试验、真空试验、氦气检漏试验、千斤顶试验、吊耳载荷试验、叠装试验等验收试验。' print(re.sub('[,。、a-zA-Z0-9()]','',string3))
08:[^]的使用
import re ret = re.match("([^-]*)-(\d+)", "010-12345678") #^在[ ]里面代表非的含义:[^-]* *代表前所有字符0个或者多个,非-的字符串 print(ret.group()) print(ret.group(1)) print(ret.group(2)) #010-12345678 #010 #12345678
09: 对汉字的匹配
import re text = "你好,世界!Hello, 世界!" pattern = re.compile(r'[\u4e00-\u9fff]+') # 匹配汉字的正则表达式 result = pattern.findall(text) print(result) # ['你好', '世界', '世界']
import re text = "你好,世界!Hello, 世界!" pattern = r'[\u4e00-\u9fff]+' # 匹配汉字的正则表达式 result = re.match(pattern, text) if result: print(result.group()) # 输出匹配到的汉字 else: print("No match") # 你好
match和findall的区别:
match 和 findall 都是 Python 中 re 模块提供的用于正则表达式匹配的方法,它们的主要区别在于匹配的方式和返回结果的形式。
match: 从字符串的开头开始匹配,如果字符串的开头不符合正则表达式,则返回 None。如果匹配成功,返回一个匹配对象,可以使用 group() 方法获取匹配的内容。
findall: 在整个字符串中查找匹配的内容,并以列表的形式返回所有匹配的结果。如果没有匹配成功,返回空列表。
上述例子中findal可以找到所有的汉字,match只能找到第一组汉字;
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。