Python 正则表达式
1、正则表达式介绍
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。
re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
本文章不考虑匹配模式,例如忽略大小写、多行模式、.号可以匹配换行符等等。
建议直接在这个网址进行正则表达式的编写:https://c.runoob.com/front-end/854/
2、元字符
单字符匹配:
多字符匹配:
3、re模块函数处理
1、re.compile:re.compile(pattern)
re.compile用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
2、re.match:re.match(pattern,string)
re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
3、re.search:re.search(pattern,string)
re.search 扫描整个字符串并返回第一个成功的匹配。
ps:re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
4、re.sub:re.sub(pattern,repl,string,count=0)
检索和替换
re.sub用于替换字符串中的匹配项。
pattern : 正则模式。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
5、re.findall:re.findall(pattern,string[,pos[,endpos]])
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
pattern : 正则模式。
string : 待匹配的字符串。
pos : 可选参数,指定字符串的起始位置,默认为 0。
endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。
注意: match和search是匹配一次;findall是匹配所有。
6、re.split:re.split(pattern,string[,maxsplit=0])
分割
re.split按照能够匹配的子串将字符串分割后返回列表。
pattern : 正则模式。
string : 待匹配的字符串。
maxsplit:分割次数,maxsplit=1 分割一次,默认为 0,不限制次数。
7、group:用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group()
或 group(0)
4、实例应用
test_str = 'Cats are smarter than dogs'
re_obj = re.compile(r'(.*) are (.*?) .*')
search_obj = re_obj.search(test_str)
print(search_obj.group())
print(search_obj.group(0))
print(search_obj.group(1))
print(search_obj.group(2))
>>>
Cats are smarter than dogs
Cats are smarter than dogs
Cats
smarter
test_str = 'Cats are smarter than dogs'
re_obj = re.compile(r'\s')
new_str = re_obj.sub('A&', test_str)
print(new_str)
>>>
CatsA&areA&smarterA&thanA&dogs
test_str = 'Cats are smarter than dogs'
re_obj = re.compile(r'\s')
res = re_obj.split(test_str)
print(res)
>>>
['Cats', 'are', 'smarter', 'than', 'dogs']