转载:Python正则re模块详解_python re_老鼠拧刀满街找猫的博客-CSDN博客
加上了部分自己的理解简化了下说明,侵删,谢谢。
re模块的简单使用说明
re.match
该方法是从字符串的起始位置开始匹配字符串。如果匹配上,则会返回一个对象,否则返回None
import re
result=re.match(r"\d+","abc123")
print(result)
result=re.match(r"\d+","123abc")
print(result)
# 输出
None
re.fullmatch
该方法需要整个字符串跟正则完全匹配才会返回一个Match对象,否则返回None
re.search
该方法会根据传入的正则去扫描整个字符串,若能找到对应的子字符串,则返回该Match对象,否则返回None。
这里返回的Match对象保存的是从左到右匹配到的第一个子字符串的信息。
re.sub
这个方法的作用是字符串替换,其中,rep1可以是字符串,也可以是一个方法。
当rep1是一个字符串时,里面的转义字符会被加工处理。就是说,是特殊符号的,会被转为对应的意思,rep1里面的\n会被处理为换行符,\r会被处理成回车换行符,不确定的转义符不会处理,例如&等。如果是向后引用的,则会替换成对应的引用组捕获的内容,例如,\1会被替换成group(1)的内容,\2会被替换成group(2)的内容。
当rep1是一个方法时,该方法的入参是一个Match对象,并且必须有返回值
import re
result=re.sub(r"\d+",lambda m:str(int(m.group())+1),"abc1kk2k")
print(result)
result=re.sub(r"\d+","-\g<0>-","abc1kk2k")
print(result)
result=re.sub(r"(\d+)",r"=+\1=","abc1kk2k")
print(result)
# 输出
abc2kk3k
abc-1-kk-2-k
abc=+1=kk=+2=k
re.subn
该方法除了会多返回一个替换次数的结果外,其他功能都与sub一样。返回结果是一个tupl
result=re.subn(r"(\d+)",r"=\1=","abc1kk2k")
print(result)
# 输出
('abc=1=kk=2=k', 2)
re.split
如果pattern没有捕获组的话,则按照正则分割后,返回一个list结果集;如果pattern里面包含捕获组的话,list结果集里面包含捕获组获取到的内容
result=re.split(r"\d+","abc11kk22k34")
print(result)
result=re.split(r"\d+","abc11kk22k34", 1) # 1为匹配次数
print(result)
# 输出
['abc', 'kk', 'k', '']
['abc', 'kk22k34']
re.findall
re.finditer
返回一个迭代器,迭代器里面的每个对象都是Match类型的数据
result=re.finditer(r"\d+","abc11kk22k34")
print(result)
for m in result:
print(m.group(0))
# 输出
11
22
34
re.compile
将需要匹配的re字符生成pattern对象,以便长期使用。
a = re.compile(r"\d+")
r = re.search(a,"abc11kk22k34")
print(r.group(0))
# 输出
11
re.purge
清除正则表达式缓存
re.escape
转义特殊字符,就是把有特殊意义的字符串转义为普通字符串
print(re.escape('http://www.python.org')) # http://www\.python\.org
print(re.escape('http://www.python.org'))
# http://www\.python\.org
re.group()用法
在正则表达式中,re.group()方法是用来提取出分组截获的字符串,匹配模式里的括号用于分组。
举例说明:
import re
# 匹配模式
test_pattern = r"(\d{2}年)(\d{4}年)(\d{4}年)"
# 待匹配的字符串
test = "18年2019年2020年"
# 整体匹配结果
print(re.search(test_pattern, test).group())
# 整体匹配结果
print(re.search(test_pattern, test).group(0))
# 第一个括号处
print(re.search(test_pattern, test).group(1))
# 第二个括号处
print(re.search(test_pattern, test).group(2))
# 第三个括号处
print(re.search(test_pattern, test).group(3))
# 输出
18年2019年2020年
18年2019年2020年
18年
2019年
2020年
匹配模式中的三个括号将匹配结果分成了三组。
re.group() 与re.group(0)就是匹配的整体结果;
re.group(1) 列出第一个括号匹配部分;
re.group(2) 列出第二个括号匹配部分;
re.group(3) 列出第三个括号匹配部分。
注意,如果没有匹配成功的,re.search返回的结果是None,使用group()会报错
如果匹配模式中没有括号(分组),使用group(1)、group(2)、group(3)会报错