正则表达式
Posted kulankadamei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
为什么要用正则表达式:用来匹配一类具有相同规则的字符串
规则:
单字符:
. :出换行以外的所有字符
[]:[aoe] [a-w] 匹配集合中任意一个字符
d:数字 [0-9]
D:非数字
w:数字、字母、下划线、中文
W:非w
s:所有的空白字符
S:非空白字符
数量修饰(控制次数):
* :任意多次 >=0
+:至少一次 >=1
?:可有可无 0次或者1次
{m}:固定m次
{m,}:至少m次
{m,n}:m~n次
边界:
:
B :
$:以XX结尾
^:以XX开头
分组:
():视为一个整体
(ab){4}: 匹配4次ab 2 1
():子模式组模式
<>:
子模式举例:
import re """题目:写一个正则,匹配下面的字符串""" string = ‘<p><div><span>猪八戒</span></div></p>‘ # 说明:匹配过程中,需要将div 和 span 分别作为一个整体,所以要用(), # 而且后面的div以及span要与前面的一致, # 所以用2来匹配第二个()中的span,1来匹配第一个()中的div pattern = re.compile(r‘<(w+)><(w+)>w+</2></1>‘) # 生成正则 ret = pattern.search(string) # 搜索要匹配的字符串 print(ret)
运行结果:
ret----- <re.Match object; span=(3, 30), match=‘<div><span>猪八戒</span></div>‘>
贪婪模式: .* 和 .+
.*? :取消贪婪模式
.+?:取消贪婪模式
举例:
string_2 = ‘<div>一二三四五</div></div></div>‘ pattern_2 = re.compile(r‘<div>.*</div>‘) # .* 贪婪模式,匹配一二三四五</div></div> pattern_3 = re.compile(r‘<div>.*?</div>‘) # .*? 取消贪婪模式,只匹配到 一二三四五 就结束匹配 ret_2 = pattern_2.search(string_2) ret_3 = pattern_3.search(string_2) print("ret_2 ----", ret_2) # 可以匹配全部的 print("ret_3 ----", ret_3) # 匹配部分
运行结果:
ret_2 ---- <re.Match object; span=(0, 28), match=‘<div>一二三四五</div></div></div>‘> ret_3 ---- <re.Match object; span=(0, 16), match=‘<div>一二三四五</div>‘>
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性