正则表达式是用来匹配字符串或者子串的一种模式,匹配的字符串可以很具体,也可以很一般化。
Python 标准库提供了 re 模块:
import re
re.match()
函数对字符串的开头进行匹配,返回第一个匹配对应的Match对象,否则返回None:
pat = "\d+"
s = "abc123abc123456"
re.match(pat, s)
由于字符串不是字母开头,没有匹配结果。
与re.match()
函数不同,re.search()
函数会用正则表达式去匹配字符串中所有的子串,如果找到,返回第一个匹配对应的Match对象,否则返回None:
re.search(pat, s)
<re.Match object; span=(3, 6), match='123'>
可以调用返回的Match对象的.group()方法查看匹配到的字符串:
m = re.search(pat, s)
m.group(0)
'123'
re.split()
使用指定的正则表达式作为分隔符,对字符串进行分割,其用法为:
pat = " +"
s = "a b c d e"
re.split(pat, s)
['a', 'b', 'c', 'd', 'e']
re.sub()
函数对字符串中正则表达式匹配的部分进行替换:
pat = " +"
replace = ";"
s = "a b c d e"
re.sub(pat, replace, s)
'a;b;c;d;e'
正则表达式由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义:
子表达式 | 匹配内容 |
---|---|
. | 匹配除了换行符之外的内容 |
\w | 匹配所有字母和数字字符 |
\d | 匹配所有数字,相当于 [0-9] |
\s | 匹配空白,相当于 [\t\n\t\f\v] |
\W,\D,\S | 匹配对应小写字母形式的补 |
[...] | 表示可以匹配的集合,支持范围表示如 a-z, 0-9 等 |
(...) | 表示作为一个整体进行匹配 |
¦ | 表示逻辑或 |
^ | 表示匹配后面的子表达式的补 |
* | 表示匹配前面的子表达式 0 次或更多次 |
+ | 表示匹配前面的子表达式 1 次或更多次 |
? | 表示匹配前面的子表达式 0 次或 1 次 |
{m} | 表示匹配前面的子表达式 m 次 |
{m,} | 表示匹配前面的子表达式至少 m 次 |
{m,n} | 表示匹配前面的子表达式至少 m 次,至多 n 次 |
例如: