一、正则表达式
百科:正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
解释:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式的大致匹配过程是:
1.依次拿出表达式和文本中的字符比较,
2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。
3.如果表达式中有量词或边界,这个过程会稍微有一些不同。
二、正则表达式的语法规则
三、正则表达式相关注解
(1)数量词的贪婪模式与非贪婪模式
正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字 符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式”ab*”如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量 词”ab*?”,将找到”a”。
注:我们一般使用非贪婪模式来提取。
(2)反斜杠问题
与大多数编程语言相 同,正则表达式里使用”\”作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符”\”,那么使用编程语言表示的正则表达式里将需要4个反 斜杠”\\\\”:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r”\\”表示。同样,匹配一个数字的”\\d”可以写成r”\d”。有了原生字符串,妈妈也不用担心是不是漏写了反斜杠,写出来的表达式也更直观勒。
四、相关模块及函数
(一)、Re模块
Python 自带了re模块,它提供了对正则表达式的支持。主要用到的方法列举如下
1
2
3
4
5
6
7
8
9
10
|
#返回pattern对象
re
.
compile
(
string
[
,
flag
]
)
#以下为匹配所用函数
re
.
match
(
pattern
,
string
[
,
flags
]
)
re
.
search
(
pattern
,
string
[
,
flags
]
)
re
.
split
(
pattern
,
string
[
,
maxsplit
]
)
re
.
findall
(
pattern
,
string
[
,
flags
]
)
re
.
finditer
(
pattern
,
string
[
,
flags
]
)
re
.
sub
(
pattern
,
repl
,
string
[
,
count
]
)
re
.
subn
(
pattern
,
repl
,
string
[
,
count
]
)
|
介绍一下pattern的概念,pattern可以理解为一个匹配模式,那么我们怎么获得这个匹配模式呢?很简单,我们需要利用re.compile方法就可以。
1
|
pattern
=
re
.
compile
(r
'hello'
)
|
在参数中我们传入了原生字符串对象,通过compile方法编译生成一个pattern对象,然后我们利用这个对象来进行进一步的匹配。
另外大家可能注意到了另一个参数 flags,在这里解释一下这个参数的含义:
参数flag是匹配模式,取值可以使用按位或运算符’|’表示同时生效,比如re.I | re.M。
可选值有:
1
2
3
4
5
6
|
•
re
.
I
(全拼:
IGNORECASE
)
:
忽略大小写(括号内是完整写法,下同)
•
re
.
M
(全拼:
MULTILINE
)
:
多行模式,改变
'^'和
'$'的行为
•
re
.
S
(全拼:
DOTALL
)
:
点任意匹配模式,改变
'.'的行为
•
re
.
L
(全拼:
LOCALE
)
:
使预定字符类
\w
\W
\b
\B
\s
\S
取决于当前区域设定
•
re
.
U
(全拼:
UNICODE
)
:
使预定字符类
\w
|