正则表达式非Python独有,在Python中通过re库模块实现。
下面是一些常见的匹配模式
re.match
re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
最常规的匹配
import re
content = "Hello 1234567 World_This is a Demo"
print(content)
result = re.match("^Hello\s\d\s\w.*Demo$",content)
print(result)
print(result.group()) #匹配结果
print(result.span()) #整个字符串全匹配
泛匹配
import re
content = "Hello 1234567 World_This is a Demo"
result = re.match("^Hello.*Demo$",content)
print(result)
print(result.group()) #匹配结果
print(result.span()) #整个字符串全匹配
匹配目标
import re
content = "Hello 1234567 World_This is a Demo"
result = re.match("^Hello\s(\d+)\sWorld.*Demo$",content)
print(result)
print(result.group(1)) #匹配第一个括号内的结果
print(result.span()) #整个字符串全匹配
贪婪匹配
import re
content = "Hello 1234567 World_This is a Demo"
result = re.match("^He.*(\d+).*Demo$",content)
print(result)
print(result.group(1)) #匹配结果只是最后的一个数字7
print(result.span()) #整个字符串全匹配
非贪婪匹配
import re
content = "Hello 1234567 World_This is a Demo"
result = re.match("^He.*?(\d+).*Demo$",content)
print(result)
print(result.group(1)) #匹配结果是1234567,关键在于'?'
print(result.span()) #整个字符串全匹配
匹配模式
import re
content = "Hello 1234567 World_This
is a Demo"
result = re.match("^He.*?(\d+).*Demo$",content,re.S)
print(result)
print(result.group(1)) #匹配结果是1234567
print(result.span()) #整个字符串全匹配
转义
import re
content = "prices is $5.00"
result = re.match("prices is \$5\.00",content)
print(result) #需要使用转义符
总结:尽量用使用泛匹配,使用括号的到匹配目标,尽量使用非贪婪模式,有换行符就用re.S
re.search
re.search扫描整个字符串并返回第一个成功的匹配(不需要开头和结尾的匹配)
search(正则规则,匹配串,有换行符就加上re.S)
import re
content = "Hello 1234567 World_This is a Demo"
result = re.search("^He.*?(\d+).*Demo$",content)
print(result.group(1)) #匹配结果是1234567
re.findall
搜索字符串,以列表形式返回所有能匹配的子串
search是查找一个,findall是查找所以的,下面来看一下具体的使用
search返回的是一个,而findall返回的是list
import re
html = '"
二珂《带着音..
Scream - Mic
薛之谦
周杰伦
李宗盛
成都
"'
result = re.search('
.*?href="(.*?)">(.*?)',html,re.S)
print(result)
if result:
print(result.group(1), result.group(2))
import re
html = '"
二珂《带着音..
Scream - Mic
薛之谦
周杰伦
李宗盛
成都
"'
results = re.findall('
.*?href="(.*?)">(.*?)',html,re.S)
print(results)
for result in results:
print(result)
re.sub
替换字符串中每一个匹配的的子串后返回替换后的字符串
sub(要替换的子串,替换成的子串,替换字符串)
import re
content = "Hello 1234567 World_This is a Demo"
result = re.sub('\d+','',content)
print(result)
re.compile
将正则字符串编译成正则表达式对象(将一个正则表达式串编译成正则对象,以便于复用该匹配模式)
import re
content = "Hello 1234567 World_This is a Demo"
patten = re.compile('Hello.*Demo',re.S)
result = re.search(patten,content)
print(result)
这里要注意re.S的使用,只能在compile中复制模式,到其它方法去匹配
领取专属 10元无门槛券
私享最新 技术干货