正则表达式
应用场景
-
特定规律字符串的查找切割替换等
-
邮箱格式、URL、IP等的校验
-
爬虫项目中,特定内容的提取
使用原则
基本使用
正则规则
-
单个字符 普通字符:简单来说就是一对一的完全匹配。
[]:中间的任意一个字符
[a-z]:a~z之间的任意字符(所有的小写字母)
[a-zA-Z]:匹配所有的字母,多个连续的片段中间不能有任何多余的字符
[^0-9]:匹配除0-9以外的任意字符
. :匹配除‘n‘以外的任意字符
d:数字字符,等价于[0-9]
D:非数字字符,等价于[^0-9]
w:匹配字(数字、字母、下划线、汉字)
W:匹配非字(w相反的内容)
s:所有的空白字符(n、t、r、空格)
S:非空白字符(s相反的内容)
b:词边界(开头、结尾、空格、标点等)
B:非词边界(b相反的内容)
-
次数限定
*:前面的字符出现任意次
+:至少一次
?:最多一次
{m,n}:m <= 次数 <= n
{m,}:至少m次
{,n}:至多n次
{m}:指定m次
-
边界限定
-
^:以指定的内容开头
-
$:以指定的内容结束
-
示例:
import re
?
# ^:以指定内容开头
# f = re.findall(‘^hello‘,‘hellosjdhelloalskdhello‘)
?
# $:以指定内容结尾
f = re.findall(‘hello$‘,‘hellosjdhelloalskdhello‘)
?
print(f)
-
优先级控制
-
|:表示或,它拥有最低的优先级
-
():表示一个整体,可以明确的指定结合性/优先级
-
示例:
import re
?
f = re.findall(‘a(hello|world)c‘,‘sahdjsahellocaworldcjsdhs‘)
?
print(f)
-
分组匹配
-
示例1:
import re
?
c = re.compile(r‘(d+)([a-z]+)(d+)‘)
?
s = c.search(‘sdsdj235sadhasjd36432sjdha‘)
?
# 完整匹配结果
print(s.group(),s.span())
# 等价于上式
print(s.group(0),s.span(0))
# 第几个()匹配的结果
print(s.group(1),s.span(1))
print(s.group(2),s.span(2))
print(s.group(3),s.span(3))
-
示例2:
import re
?
# 固定匹配
# c = re.compile(r‘<a>w+</a>‘)
?
# 1表示前面第一个()匹配的内容
# c = re.compile(r‘<([a-z]+)><([a-z]+)>w+</2></1>‘)
?
# 给分组()起名字
c = re.compile(r‘<(?P<goudan>[a-z]+)><(?P<dahua>[a-z]+)>w+</(?P=dahua)></(?P=goudan)>‘)
?
s = c.search(‘<div><a>百度一下</a></div>‘)
?
if s:
print(s.group())
练习
-
邮箱格式的匹配
#邮箱格式的匹配
import re
c = re.compile(r‘^[email?protected](w+.)+(com|cn|edu|net)$‘)
string = ‘[email?protected]‘
# string = ‘[email?protected]‘
# string = ‘[email?protected]‘
s = c.search(string)
if s:
print(s.group())
-
手机号码的匹配
#手机号码的匹配
import re
x = r‘^(1[3578]d{9}|147d{8})$‘
print(re.match(x,‘18768853995‘).group())
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|