元字符及其说明
元字符 | 说明 |
---|---|
. | 匹配任意字符(换行符\n除外) |
\ | 转义字符 |
[… ] | 字符集,对应位置可以是字符集中任意字符 |
\d | 数字:[0-9] |
\D | 非数字:[^\d] |
\s | 空白字符:[\t\r\n\f\v<空格>] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z0-9] |
\W | 非单词字符:[^\w] |
元字符 | 说明 |
---|---|
+ | 匹配前一个字符至少1次 |
? | 匹配前一个字符0/1次 |
{m} | 匹配前一个字符m次 |
{m,n} | 匹配前一个字符m至n次 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
* | 匹配一个字符任意多次包括0次 |
(…) | 表达式分组 |
\ |
引用编号为number的分组匹配到字符串 |
在 Python 中,可以利用内置的 re 模块来使用正则表达式。在因为 Python 中\
也用转义,因此使用 Python的原始字符串,加前缀r``。
常用函数
- compile函数
- match函数
- search函数
- findall函数
- finditer函数
- split函数
- sub函数
- subn函数
re 模块的一般使用步骤如下:
- 使用 compile 函数将正则表达式的字符串形式编译为一个 Pattern 对象
- 通过 Pattern 对象提供的一系列方法对文本进行匹配查找,获得匹配结果(一个 Match 对象)
- 最后使用 Match 对象提供的属性和方法获得信息,根据需要进行其他的操作
complie函数
compile 函数用于编译正则表达式,生成一个 pattern 对象,函数如下
|
|
其中,pattern 是一个字符串形式的正则表达式,flag 是一个可选参数,表示匹配模式,比如忽略大小写,多行模式等。
match函数
match 函数用于查找字符串,它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。函数如下:
|
|
其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。因此,当你不指定 pos 和 endpos 时,match 方法默认匹配字符串的头部。
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。
search 函数
search 用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果,它的一般使用形式如下:
|
|
其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。
findall 函数
上面的 match 和 search 都是一次匹配,只要找到了一个匹配的结果就返回。然而,在大多数时候,我们需要搜索整个字符串,获得所有匹配的结果。
findall 方法的使用形式如下:
|
|
其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。
findall 以列表形式返回全部能匹配的子串,如果没有匹配,则返回一个空列表。
finditer 函数
finditer 与 findall 类似,也是搜索整个字符串,获得所有匹配的结果。但它返回一个顺序访问每一个匹配结果(Match 对象)的迭代器。
split 函数
split 函数按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:
|
|
其中,maxsplit 用于指定最大分割次数,不指定将全部分割。
sub 函数
sub 函数用于替换。它的使用形式如下:
|
|
其中,repl 可以是字符串也可以是一个函数:
- 如果 repl 是字符串,则会使用 repl 去替换字符串每一个匹配的子串,并返回替换后的字符串,另外,repl 还可以使用
\id
的形式来引用分组,但不能使用编号 0; - 如果 repl 是函数,这个方法应当只接受一个参数(Match 对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。
count 用于指定最多替换次数,不指定时全部替换。
subn 函数
subn 函数与 sub 类似,也用于替换。它的使用形式如下:
|
|
它返回一个元组:
|
|
元组有两个元素,第一个元素是使用 sub 方法的结果,第二个元素返回原字符串被替换的次数。
事实上,也可以不使用 compile 函数生成的 Pattern 对象,直接使用match,search等函数。如果一个正则表达式需要用到多次,考虑到效率,应该使用Pattern对象。