词
尾
,
即
表示
前
面或
者
后面为
非
单
词
类字符
如:
r“
\b
foo
\b
”
匹配
”
foo
”,“
foo
.” “(
foo
)” “bar
foo
baz”
但不
匹配
“
foobar”“foo3”
注
意
:
str
中
’
\b’
表示
退
格字符,所以正则表达式参数或
者前
面
添
加
转
义
,或
者
使用
原
始
字符串
r
,
即
“
\
\b
foo
\\b
”
或
r“
\
b
foo
\b
”
\B
与
\b
含义
相反
,
表示位于单
词
中
间
如:
'
py
\B
’
匹配
”
py
thon” “
py
3” “
py
2”,
但不
匹配
”
happy” ”sleepy” ”py!”

4.2.1 正则表达式元字符 -
重复限
定符
•
重复限
定符
:指定
重复
的次数
正则表达式
说明
X{n,m}
X
重复
n
到
m
次
如:
“
o
{1,3}
”
匹配
“
f
oooooo
d
”
中的
前
3
个
“
o”
和后
3
个
“
o”
X{n,}
X
至
少
重复
n
次
如:
“
o
{2,}
”
匹配
“
f
oooooo
d
”
中的所有的
“
o”,
不
匹配
“
bob”
中的
“
o”
贪婪
匹配算法
X{n}
X
重复
n
次
如:
r“
\b[0-9]{3}
”
匹配
”
000”
~ “
999”
, “o
{2}”
匹配
“
f
oo
d”
中的
两
个
”
o”,
不
匹配
“
bob”
中的
“
o”
X+
X
重复
1
次或多次,
等价
于
X
{1,}
如:
’
zo
+
’
匹配
”
zo
” ,“
zoo
”,
但不
匹配
”
z”
X*
X
重复
0
次或多次,
等价
于
X
{0,}
如:
’
zo
*
’
匹配
”
zo
” ,“
zoo
”, ”
z
”
X?
X
字符可选,
即
X
重复
0
次或
1
次,
等价
于
X{0,1}
如:
’
colou
?
r’
匹配
”
color
”
,”
colour
”
;
X
可为单个字符或
者
通过小括号包含的子模式
(
作
为一个整
体
)

匹配算法:
贪婪
匹配算法
•
P
ython
针
对
重复限
定符,
默认
采用
贪婪
匹配算法
•
贪婪
匹配算法
是指
重复限
定符
会导致
正则表达式引
擎
尽
可
能
多( leftmost or
largest)
地匹配要
重复
的
前导
字符,只有
当
这
种重复
引
起
整个正则表达式匹
配
失败
的
情况
下,引
擎会
进行回
溯
(
尝试稍
短的匹配)
>>> re.findall(r'o{2,}[dt]', 'foooood fooooob foooot')
['oooood', 'oooot']
>>>re.findall('<.
+
>','<
book><title>Python</title><author>Dong</author></book
>')
['<book><title>Python</title><author>Dong</author></book>']
贪婪
算法返回了一个最长匹配
!
如
何
如
我们期望
的
那
样匹配
XML
的开始与结
束标签
?

匹配算法:
懒惰
匹配算法
•
如果在
重复限
定符后面加后
缀”
?
”
,表示使
用
懒惰
匹配算法
•
懒惰
匹配算法
是指正则表达式引
擎
尽
可
能
少
地进行
重复
匹配,只有
当
这
种重复
引
起
整个正则表达式
匹配
失败
的
情况
下,引
擎
会
进行回
溯
符号
说明
*?
重复任意
次,
但尽
可
能
少
重复
+?
重复
1
次或
更
多次,
但尽
可
能
少
重复
??
重复
0
次或
1
次,
但尽
可
能
少
重复
{n,m}?
重复
n
到
m
次,
但尽
可
能
少
重复
{n,}?


You've reached the end of your free preview.
Want to read all 37 pages?
- Fall '19