正则表达式是用于文本匹配的工具,在源字符串中查找与给定的正则表达式相匹配的部分。一个正则表达式由字母、数字和特殊符号(括号、星号、问号等)组成。一般采用re模块处理正则表达式。
re模块提供了一些根据正则表达式进行查找、替换、分隔字符串的函数,这些函数使用一个正则表达式作为第一个参数。采用re模块中的函数可对字符串进行特定处理。
findall(pattern,string,flags=0)
根据pattern在string中匹配字符串。如果匹配成功,返回包含匹配结果的列表,否则返回空列表。
importre
#正则表达式
str='小明xiaomingXIAOMING13620613118 (020)-12345678
02012345678 020-12345678'
#匹配手机号或者固话号码
print(re.findall(r'[(]?\d[)]?[-]?\d',str))
#匹配中文名字
print(re.findall(r'[\u4E00-\u9FA5]',str))
#匹配小写名字拼音
print(re.findall(r'[a-z]',str))
#匹配大写名字拼音
print(re.findall(r'[A-Z]',str))
#匹配名字拼音(忽略大小写)
print(re.findall(r'[A-Z]',str,re.I))
#匹配任意字符串
print(re.findall(r'.*',str))
out:
['13620613118','(020)-12345678',
'02012345678','020-12345678']
['小明']
['xiaoming']
['XIAOMING']
['xiaoming','XIAOMING']
['小明xiaomingXIAOMING13620613118 (020)-12345678
02012345678 020-12345678','']
sub(pattern,repl,string,count=0)
根据指定的正则表达式替换源字符串中的子串。如果count=0,则返回string中匹配的所有结果;如果count>0,则返回count个匹配结果。
importre
#正则表达式
str='小明xiaomingXIAOMING小明13620613118 小明
(020)-12345678 02012345678 020-12345678'
#将文字 小明全部替换成小黑
print(re.sub(r'[\u4E00-\u9FA5]','小黑',str))
#将文字 前面2个小明替换成小黑
print(re.sub(r'[\u4E00-\u9FA5]',
'小黑',str,count=2))
out:
小黑xiaomingXIAOMING小黑13620613118 小黑
(020)-12345678 02012345678 020-12345678
小黑xiaomingXIAOMING小黑13620613118 小明
(020)-12345678 02012345678 020-12345678
subn(pattern,repl,string,count=0)
作用和sub()相同,返回1个2元的元祖。第1个元素是替换结果,第2个元素是替换的次数。
importre
#正则表达式
str='小明xiaomingXIAOMING小明13620613118
小明(020)-12345678 02012345678 020-12345678'
#将文字 小明全部替换成小黑,结果显示替换了3次
print(re.subn(r'[\u4E00-\u9FA5]','小黑',str))
#将文字 前面2个小明替换成小黑,
结果根据指定的2次替换值一致
print(re.subn(r'[\u4E00-\u9FA5]','小黑'
,str,count=2))
out:
('小黑xiaomingXIAOMING小黑13620613118 小黑
(020)-12345678 02012345678 020-12345678',3)
('小黑xiaomingXIAOMING小黑13620613118 小明
(020)-12345678 02012345678 020-12345678',2)
match(pattern,string,flags=0)
根据pattern从string头部开始匹配字符串,只返回第1次匹配成功的对象。否则返回None。
importre
#正则表达式
str='小明xiaomingXIAOMING小明'
str1='xiaomingXIAOMING小明'
print(re.match(r'[\u4E00-\u9FA5]',str))
print(re.match(r'[\u4E00-\u9FA5]',str1))
out:
match='小明'>
None
search(pattern,string,flags=0)
根据pattern字string中匹配字符串,只返回第1次匹配成功的结果,否则返回None。
importre
#正则表达式
str='小明xiaomingXIAOMING小明'
str1='xiaomingXIAOMING小明'
print(re.search(r'[\u4E00-\u9FA5]',str))
print(re.search(r'[\u4E00-\u9FA5]',str1))
out:
match='小明'>
match='小明'>
compile(pattern,flags=0)
编译正则表达式pattern,返回1个Pattern对象。
importre
#正则表达式
str='小明xiaomingXIAOMING小明'
print(re.compile(r'[\u4E00-\u9FA5]'))
out:
re.compile('[\\u4E00-\\u9FA5]')
split(pattern,string,maxsplit=0)
根据pattern分隔string,maxsplit表示最大的分隔数。
importre
#正则表达式
str='小明xiaomingXIAOMING小明'
print(re.split(r'[\u4E00-\u9FA5]',str))
print(re.split(r'[\u4E00-\u9FA5]',str,1))
out:
['','xiaomingXIAOMING','']
['','xiaomingXIAOMING小明']
escape(pattern)
匹配字符串中的特殊符号,如“*”、“+”、“?”等。escape函数可理解为为特殊符号加上“\”,以减少特殊符号过多时“\”的输入繁琐。
re模块常用函数表
re模块规则选项(flags选项值)
Pattern对象的属性和方法
importre
str='小明*xiaom?ingXIAO+MING小明'
s=re.compile(r'[a-z]')
print(s.findall(str))
print(s.findall(str[5:]))
print(s.pattern)
out:
['xia','ing']
['aom','ing']
[a-z]{3}
Pattern对象的属性和方法表
match对象的属性和方法
importre
str='xiaoxiaoxiaoxiao'
s=re.compile(r'([a-z])\1')#\1再次调用该分组
m=s.match(str)
print(m)
print(m.group())
print(m.group(1))
print(m.group())
#(?Pxiao)给分组命名为one,
并定义一个分组(xiao);
# (?P=one)使用分组名为one的分组,
即再次调用分组(xiao),相当于”\1"
s=re.compile(r'(?Pxiao)(?P=one)')
m=s.match(str)
print(m.group('one'))
print(m.groupdict().keys())
print(m.groupdict().values())
print(m.re.pattern)
out:
xiaoxiao
xiao
xiaoxiao
xiao
dict_keys(['one'])
dict_values(['xiao'])
(?Pxiao)(?P=one)
match对象的属性和方法表
正则表达式特殊字符表
正则表达式常用限定符表
领取专属 10元无门槛券
私享最新 技术干货