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'>