Python 正则表达式总结

元字符及其说明

元字符 说明
. 匹配任意字符(换行符\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 对象,函数如下

1
re.compile(pattern[,flag])

其中,pattern 是一个字符串形式的正则表达式,flag 是一个可选参数,表示匹配模式,比如忽略大小写,多行模式等。

match函数

match 函数用于查找字符串,它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。函数如下:

1
match(string[, pos[, endpos]])

其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。因此,当你不指定 pos 和 endpos 时,match 方法默认匹配字符串的头部

当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。

search 函数

search 用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果,它的一般使用形式如下:

1
search(string[, pos[, endpos]])

其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。

当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。

findall 函数

上面的 match 和 search 都是一次匹配,只要找到了一个匹配的结果就返回。然而,在大多数时候,我们需要搜索整个字符串,获得所有匹配的结果。

findall 方法的使用形式如下:

1
findall(string[, pos[, endpos]])

其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。

findall 以列表形式返回全部能匹配的子串,如果没有匹配,则返回一个空列表。

finditer 函数

finditer 与 findall 类似,也是搜索整个字符串,获得所有匹配的结果。但它返回一个顺序访问每一个匹配结果(Match 对象)的迭代器。

split 函数

split 函数按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:

1
split(string[, maxsplit])

其中,maxsplit 用于指定最大分割次数,不指定将全部分割。

sub 函数

sub 函数用于替换。它的使用形式如下:

1
sub(repl, string[, count])

其中,repl 可以是字符串也可以是一个函数:

  • 如果 repl 是字符串,则会使用 repl 去替换字符串每一个匹配的子串,并返回替换后的字符串,另外,repl 还可以使用 \id 的形式来引用分组,但不能使用编号 0;
  • 如果 repl 是函数,这个方法应当只接受一个参数(Match 对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。

count 用于指定最多替换次数,不指定时全部替换。

subn 函数

subn 函数与 sub 类似,也用于替换。它的使用形式如下:

1
subn(repl, string[, count])

它返回一个元组:

1
(sub(repl, string[, count]), 替换次数)

元组有两个元素,第一个元素是使用 sub 方法的结果,第二个元素返回原字符串被替换的次数。

事实上,也可以不使用 compile 函数生成的 Pattern 对象,直接使用match,search等函数。如果一个正则表达式需要用到多次,考虑到效率,应该使用Pattern对象。

参考资料

赞赏是对作者最大的支持!
0%