一、正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。正则表达式有两部分参数,一个是匹配规则pattern,另一个是待匹配的数据源,data_source,用正则表达式时需要导入模块re,import re
import re m = re.match(‘abc‘,‘abcdef‘) # 其中abc为pattern,abcdef为data_source,re.match(pattern,data_source)方法, # 从data_source的左边开头进行匹配,若匹配上返回一个对象并且停止匹配,即只能匹配一次,匹配不上返回None print(m) if m: print(m.group()) # obj.group()方法,查看匹配到的内容
<_sre.SRE_Match object; span=(0, 3), match=‘abc‘>
abc
但以上的方法pattern写的固定,只能匹配abc不够灵活,且只能匹配一次
import re m1 = re.findall(‘[0-9]{0,10}‘,‘146567abc576def‘) # 其中[0-9]{0,10}为pattern,[0-9]代表匹配的为0-9的数字, # {0,10}代表前面定义的类型可以为相同的0-10个进行匹配,可以写一个数字代表确定的个数进行匹配 # 146567abc576def为data_source,re.match(pattern,data_source)方法, # 把data_source的符合匹配规则的子字符全部匹配出来返回一个列表, # {0,10}存在0,则返回的列表会出现空的,一般是从1开始,例如{1,10} m2 = re.findall(‘[0-9]{1,10}‘,‘146567abc576def‘) m3 = re.findall(‘[a-zA-Z]{1,10}‘,‘146567abc576def‘) # [a-zA-Z]代表匹配为所有字母,大小写均可 m4 = re.findall(‘.*‘,‘146567abc576def‘) # 其中.代表可以匹配换行符以外的所有字符,*代表0到多个,功能类似{0,10} m5 = re.findall(‘.+‘,‘146567abc576def‘) # 其中+代表1到多个,功能类似于{1,10} m6 = re.search(‘\d+‘,‘146567abc576def‘) # re.search()方法,从data_source的左边开头进行匹配,直到找到一个符合的结果然后结束, # 或者找遍data_source都没有发现结束,其中\d代表匹配任意数字,类似[0-9], # \D代表匹配任意非数字,\s代表匹配任意空白字符,\S代表匹配任意非空字符, # \w匹配字母数字,\W匹配非字母数字 m7 = re.search(‘^\d+‘,‘146567abc576def‘) # 其中^代表从data_source的第一个字符开始就要求符合匹配规则,否则找不到NoneType, # $代表从data_source的最后一个字符要符合匹配规则 m8 = re.sub(‘\d+‘,‘-‘,‘146567abc576def‘) # re.sub(pattern,str,data_source,count= )方法,从data_source的左边开始, # 把匹配到的子字符串替换为设定的str,count=num可以指定替换的个数,默认全部替换 if m1 or m2 or m3 or m4 or m5 or m6 or m7 or m8: # print(m.group()) # re.findall没有obj.group()方法,直接使用print(obj)查看匹配到的内容 print(m1) print(m2) print(m3) print(m4) print(m5) print(m6.group()) # 查看re.search()中匹配到的子字符串 print(m7.group()) print(m8)
[‘146567‘, ‘‘, ‘‘, ‘‘, ‘576‘, ‘‘, ‘‘, ‘‘, ‘‘]
[‘146567‘, ‘576‘]
[‘abc‘, ‘def‘]
[‘146567abc576def‘, ‘‘]
[‘146567abc576def‘]
146567
146567
-abc-def
时间: 2024-10-11 04:01:43