0.常用匹配规则
规则 | 描述 |
---|---|
\s | 任意空白字符 |
\d | 任意数字 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
[…] | 匹配列出的单个字符 |
[^…] | 匹配除了列出字符以外的单个字符 |
? | 非贪婪模式 |
{n} | 精确匹配前面n个表达式 |
{n,m} | 匹配n-m个表达式 |
简要介绍常用的匹配方法
方法名 | 作用 |
---|---|
match | 从字符串开头开始匹配 |
search | 从任意位置开始匹配,并返回成功匹配的第一个 |
findall | 返回成功匹配的所有内容 |
sub | 匹配表达式并修改 |
complie | 将正则字符串编译成正则表达式对象 |
1.match()
基本使用
import re
content="https://mp.123csdn.234554 net/5453342 mdeditor#"
result=re.match("^https://mp.\d*csdn.(\d*)",content)
print(result) #out:<_sre.SRE_Match object; span=(0, 25), match='https://mp.123csdn.234554'>
#group()打印匹配到的内容
print(result.group()) #out:https://mp.123csdn.234554
#在正则表达式中加(),通过group(n)获取第n个()匹配的部分
print(result.group(1)) #out:234554
#span()打印匹配的范围
print(result.span()) #out:(0, 25)
贪婪与非贪婪(?)
import re
content="https://mp.123csdn.234554 net/5453342 mdeditor#"
result=re.match("^https://mp.*(\d+)",content)
#.*默认贪婪
print(result.group(1)) #out:2
result=re.match("^https://mp.*?(\d+)",content)
#?可表示非贪婪
print(result.group(1)) #out:123
2.search()
match()只能从头开始匹配,也就是说如果开始不匹配,则会返回匹配失败。而search()则可以满足从任意位置开始匹配的要求
import re
content="test https://mp.123csdn.234554 net/5453342 mdeditor#"
result=re.match("https://mp.*(\d+)",content)
print(result) #out:None
result=re.search("https://mp.*(\d+)",content)
print(result.group()) #out:https://mp.123csdn.234554 net/5453342
3.findall()
search()只会返回成功匹配的第一个内容,而findall()会返回所有的内容
import re
content="test https://mp.123csdn.234554 net/5453342 mdeditor#"
result=re.search("\d+",content)
print(result.group()) #out:123
result=re.findall("\d+",content)
print(result) #out:['123', '234554', '5453342']
4.sub()
sub({0},{1},{2})
{0} 正字表达式(被替换内容)
{1} 替换内容
{2} 原始内容
import re
content="test https://mp.123csdn.234554 net/5453342 mdeditor#"
result=re.sub("\d+",'',content)
print(result)
5.complie()
将表达式字符串编译为表达式对象,便于重复使用
import re
content1="2018-11-26 12:00"
content2="2018-11-27 12:00"
content3="2018-11-28 12:00"
pattern=re.compile("\d{2}:\d{2}")
result1=re.sub(pattern,"",content1)
result2=re.sub(pattern,"",content2)
result3=re.sub(pattern,"",content3)
print(result1,result2,result3) #out:2018-11-26 2018-11-27 2018-11-28