美文网首页程序员
Learn Python 3:正则表达式

Learn Python 3:正则表达式

作者: SheHuan | 来源:发表于2017-10-25 09:00 被阅读342次

一、什么是正则表达式

正则表达式(Regular expression,常使用缩写的术语regexregexp),是一组由字母、数字、符号组成的特殊文本,用来给字符串定义一个规则,以验证字符串是否匹配、切分字符串、提取字符串等。

二、字符

正则表达式中,字符具有特殊含义,不代表其本身的字面意思。

字符 描述
. 匹配除换行符外的所有单个字符
[] 匹配方括号内的任意字符
[^] 匹配除了方括号内的任意字符
* 匹配>=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'>

相关文章

网友评论

    本文标题:Learn Python 3:正则表达式

    本文链接:https://www.haomeiwen.com/subject/xlmmrxtx.html