python正则表达式入门

python版本号3.5.2 ,64位。

从一个简单的例子来说明正则表达式的用法。


一、代码

代码如下:

>>> import re
>>> regex=re.compile('((\d)\s*(\d))')
>>> m=regex.search('1 2')

>>> m.group()
'1 2'
>>> m.group(0)
'1 2'
>>> m.group(1)
'1 2'
>>> m.group(2)
'1'
>>> m.group(3)
'2'

(1)导入正则表达式模块re

(2)通过调用compile,编译正则表达式,返回了正则表达式对象regex

这里的

((\d)\s*(\d))

:其中的括号表示 一个分组,这个表达式一共有3个分组,最外层是一个,(\d)是一个,最后的(\d)是另一个

:\d 匹配数字

:\s 匹配空格

:*  匹配0到任意多个字符。


(3)用对象的search来查找字符串 1 2,返回匹配对象m

(4)调用匹配对象的group方法,返回匹配上的字符串。

其中group() 和 group(0)是一样的,返回整个串。

group(1) group(2) group(3)分别返回匹配到的3个分组,分别是:1 2 ,1  ,2。


二、稍微复杂一点的例子

# -*- coding:gbk -*-

import re

#regex=re.compile('((\d)\s*(\d))')
#m=regex.search('1 2')

regex=re.compile(r'(\(\d\d\)\s*(\d\d\d)-(\d\d\d-\d\d\d))')

m=regex.search('my number is (12) 415-555-4242')


print(m.group())
print(m.group(0))

#输出一共有几个分组
print(len(m.groups()))

#输出分组
print(m.group(1))  # (12) 415-555-4242
print(m.group(2))  # 415
print(m.group(3))  # 555-4242


#通过循环输出分组
for i,g in enumerate(m.groups()):
    print('第 '+ str(i+1)+' 个分组是 :'+g )

print(type(m.groups()))

这个正则表达式稍微要复杂一点,特别要注意的是,当要匹配 括号()本身的时候,由于括号这里是特殊字符,表示分组,所以要进行转移变成:\( 和  \)  

另外,匹配对象的groups方法,可以返回一个包含多个分组的 元祖(tuple,如运行结果的最后一行)。

代码中的enumerate函数,可以给返回的数据进行编号,第一个是0,以此类推,在for循环中放到i中,返回的分组值放到g中。


运行结果:

===
(12) 415-555-424
(12) 415-555-424
3
(12) 415-555-424
415
555-424
第 1 个分组是 :(12) 415-555-424
第 2 个分组是 :415
第 3 个分组是 :555-424
<class 'tuple'>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值