2.1 一般形式
表2-1 量词的一般形式
量词 |
说明 |
{n} |
之前的元素必须出现n次 |
{m,n} |
之前的元素最少出现m次,最多出现n次 |
{m,} |
之前的元素最少出现m次,出现次数无上限 |
{0,n} |
之前的元素可以不出现,也可以出现,最多出现n次 (在某些语言中可以写为{,n}) |
表2-2 常用量词
常用量词 |
{m,n}等价形式 |
说明 |
* |
{0,} |
可能出现,也可能不出现,出现次数没有上限 |
+ |
{1,} |
至少出现1次,出现次数没有上限 |
? |
{0,1} |
至多出现1次,也可能不出现 |
表2-3 各类tag的匹配
匹配所有tag的表达式 |
tag分类 |
匹配分类tag的表达式 |
<[^>]+> |
open tag |
<[^/>][^>]*> |
close tag |
</[^>]+> |
|
self-closing tag |
<[^>/]+/> |
In [1]: import reIn [2]: re.search(r"\d{6}", "ab123456cd").group(0)
Out[2]: '123456'In [3]: re.search(r"^<[^>]+>$", "<bold>").group(0)
Out[3]: '<bold>'In [4]: re.findall(r"\d{6}", "zipcode1:201203, zipcode2:100859")
Out[4]: ['201203', '100859']
之前介绍的量词都可以归到一类,叫做匹配优先量词(greedy quantifier,也有人翻译为贪婪量词 )。
匹配优先量词,顾名思义,就是在拿不准是否要匹配的时候,优先尝试匹配,并且记下这个状态,以备将来"反悔"。
回溯(backtracking)
re.search(r"\".*\"", "\"quoted string\" and another\"").group(0) re.search(r'".*"', '"quoted string" and another"').group(0) re.search(r"\"[^\"]*\"", "\"quoted string\" and another\"").group(0) re.search(r'"[^"]*"', '"quoted string" and another"').group(0
两者限定的元素能出现的次数也一样,遇到不能匹配的情况同样需要回溯;唯一的区别在于,
忽略优先量词会优先选择"忽略",而匹配优先量词会优先选择"匹配"。
表2-4 匹配优先量词与忽略优先量词
匹配优先量词 |
忽略优先量词 |
限定次数 |
* |
*? |
可能不出现,也可能出现,出现次数没有上限 |
+ |
+? |
至少出现1次,出现次数没有上限 |
? |
?? |
至多出现1次,也可能不出现 |
{m,n} |
{m,n}? |
出现次数最少为m次,最多为n次 |
{m,} |
{m,}? |
出现次数最少为m次,没有上限 |
{,n} |
{,n}? |
可能不出现,也可能出现,最多出现n次 |
量词 |
转义形式 |
{n} |
\{n} |
{m,n} |
\{m,n} |
{m,} |
\{m,} |
{,n} |
\{,n} |
* |
\* |
+ |
\+ |
? |
\? |
*? |
\*\? |
+? |
\+\? |
?? |
\?\? |
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于