一、什么是正则表达式
正则表达式(Regular expression
,常使用缩写的术语regex
或regexp
),是一组由字母、数字、符号组成的特殊文本,用来给字符串定义一个规则,以验证字符串是否匹配、切分字符串、提取字符串等。
二、字符
正则表达式中,字符具有特殊含义,不代表其本身的字面意思。
字符 | 描述 |
---|---|
. | 匹配除换行符外的所有单个字符 |
[] | 匹配方括号内的任意字符 |
[^] | 匹配除了方括号内的任意字符 |
* | 匹配>=0个*前的字符 |
+ | 匹配>=1个+前的字符 |
? | 匹配0个或1个?前的字符 |
{m,n} | 匹配[n, m]个中括号前的字符,注意逗号后不要加空格 |
(abc) | 字符集,匹配和 abc 完全相同的字符串 |
| | 或运算符,匹配符号前或后的字符 |
^ | 表示行的开始 |
$ | 表示行的结束 |
\ | 转意字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ | |
\w | 匹配任意字母、数字以及下划线,等价[a-zA-Z0-9_] |
\W | 匹配非字母、数字、下划线,等价[^\w] |
\d | 匹配任意数字,等价[0-9] |
\D | 匹配非数字字符,等价[^\d] |
\s | 匹配所有空格字符 |
\S | 匹配所有非空格字符 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
\v | 垂直制表符 |
\p | CR/LF,等同于 \r\n |
三、使用正则表达式
Python
提供了re
模块,其中包含正则表达式的所有功能。
由于Python
的字符串也用反斜杠 \
转义,因此建议在正则表达式前添加 r
前缀,这样就不用考虑转义的问题了。
- 判断一个字符串是否匹配指定的正则表达式,要用
match()
方法,如果匹配成功,返回一个Match
对象,否则返回None
:
>>>import re
# 是否匹配6到20位由字母、数字、下划线组成的密码
>>>if re.match(r'\w{6,20}', 'qaz_123_wsx'):
... print('ok')
...
ok
- 切分字符串可以用
split()
方法:
>>>import re
>>>re.split(r'[\s,-]+', 'P y t h o,n-3')
['P', 'y', 't', 'h', 'o', 'n', '3']
- 可以通过分组功能在一个字符串中提取合法的子串,例如一个字符串两端是数字中间是字母,现在要提取数字:
>>>import re
>>>m=re.match(r'^(\d+)[a-zA-Z]{2,6}(\d*)$','1024qaz65536')
>>>m.groups()
('1024', '65536')
>>>m.group(0)
'1024qaz65536'
>>>m.group(1)
'1024'
>>>m.group(2)
'65536'
- 如果一个正则表达式可能使用多次,考虑到效率,可以先预编译正则表达式,之后就可以使用编译后的正则表达式了:
>>>import re
>>>cre = re.compile(r'\w{6,20}')
>>>cre.match('abc123')
<_sre.SRE_Match object; span=(0, 9), match='abc123'>
网友评论