加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式

发布时间:2020-12-13 22:30:43 所属栏目:百科 来源:网络整理
导读:一个字符 d 数字 w 字母或数字 . 任意字符 s 空格 多个字符 * 任意个字符(包括0个) + 至少一个字符 ? 0或者1个字符 {n} n个字符 {n,m} n-m个字符 d{3}s+d{3,8} 我们来从左到右解读一下: d{3} 表示匹配3个数字,例如 '010' ; s 可以匹配一个空格
一个字符
d 数字
w 字母或数字
. 任意字符
s 空格
多个字符
* 任意个字符(包括0个)
+ 至少一个字符
? 0或者1个字符
{n} n个字符
{n,m} n-m个字符

d{3}s+d{3,8}

我们来从左到右解读一下:

  1. d{3}表示匹配3个数字,例如'010'

  2. s可以匹配一个空格(也包括Tab等空白符),所以s+表示至少有一个空格,例如匹配' '' '等;

  3. d{3,8}表示3-8个数字,例如'1234567'


要做更精确地匹配,可以用[]表示范围,比如:

    [0-9a-zA-Z_]可以匹配一个数字、字母或者下划线;

  • [0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100''0_Z''Py3000'等等;

  • [a-zA-Z_][0-9a-zA-Z_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;

  • [a-zA-Z_][0-9a-zA-Z_]{0,19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。


A|B可以匹配A或B,所以[P|p]ython可以匹配'Python'或者'python'

^ 行的开头
^d 行的结尾
$ 行的结束
d$ 必须以数字结束



切分字符串

用正则表达式切分字符串比用固定的字符更灵活,请看正常的切分代码:

>>> 'a b c'.split(' ')
['a','b',68)">'',68)">'c']

嗯,无法识别连续的空格,用正则表达式试试:

>>> re.split(r's+',68)">'a b c')
[ 无论多少个空格都可以正常分割。加入,试试:

r'[s,]+',68)">'a,b,c d')
['c',68)">'d']

再加入;试试:

'd']


分组

^(d{3})-(d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码:

>>> m = re.match(r'^(d{3})-(d{3,8})$',68)">'010-12345')
>>> m
<_sre.SRE_Match object at 0x1026fb3e8>
>>> m.group(0)
'010-12345'
1)
'010'
2)
'12345'
如果正则表达式中定义了组,就可以在 Match 对象上用 group() 方法提取出子串来。


如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配:

>>> import re
# 编译:>>> re_telephone = re.compile(# 使用:>>> re_telephone.match('010-12345').groups()
('010',68)">'12345')
'010-8086').groups()
('8086')

编译后生成Regular Expression对象,由于该对象自己包含了正则表达式,所以调用对应的方法时不用给出正则字符串。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读