正则表达式非Python独有,在Python中通过re库模块实现。

下面是一些常见的匹配模式

re.match

re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

最常规的匹配

import re

content = "Hello 1234567 World_This is a Demo"

print(content)

result = re.match("^Hellosdsw.*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("^Hellos(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中复制模式,到其它方法去匹配

收藏 打印