python-re库的简单使用说明

转载: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

  • pattern 没有捕获组的话,该方法会返回所有匹配结果的list
  • pattern 包含一个或多个捕获组的话,list保存的结果是这些捕获组的匹配结果,且list里面的各项都是一个tuples

 

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)会报错

你可能感兴趣的:(python,python)