赞
踩
学习自书本《Python编程快速上手——让繁琐工作自动化》
#正则表达式
import re
aRegex=re.compile('\d\d\d-\d\d\d-\d\d\d\d')
mo=aRegex.search('我的电话号码是:123-456-7890')
print('找到句子中的匹配内容为:',mo.group())
输出结果:
找到句子中的匹配内容为: 123-456-7890
#利用括号分组 import re aRegex=re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)') mo=aRegex.search('我的电话号码是:123-456-7890') print('mo.group()',mo.group()) print('mo.group(0)',mo.group(0)) print('mo.group(1)',mo.group(1)) print('mo.group(2)',mo.group(2)) print('mo.groups()',mo.groups()) areaCode,mainNumber=mo.groups() print('areaCode是{},mainNumber是{}'.format(areaCode,mainNumber)) #如果需要在文本中匹配括号,需要用倒斜杠对左右括号进行字符转义 aRegex2=re.compile(r'(\(\d\d\d\))(\d\d\d-\d\d\d\d)') mo2=aRegex2.search('我的电话号码是:(123)456-7890') print('mo2.group(1)',mo2.group(1)) print('mo2.group(2)',mo2.group(2))
输出结果:
mo.group() 123-456-7890
mo.group(0) 123-456-7890
mo.group(1) 123
mo.group(2) 456-7890
mo.groups() ('123', '456-7890')
areaCode是123,mainNumber是456-7890
mo2.group(1) (123)
mo2.group(2) 456-7890
#用管道匹配多个分组
import re
bRegex=re.compile(r'zhangsan|li si')
mo1=bRegex.search('zhangsan and li si')
#第一次出现的匹配对象将被返回
print('mo1.group()',mo1.group())
cRegex=re.compile(r'zhang(san|si|wu)')
mo2=cRegex.search('zhangsan and zhangsi')
print('mo2.group()',mo2.group())
print('mo2.group(1)',mo2.group(1))
输出结果:
mo1.group() zhangsan
mo2.group() zhangsan
mo2.group(1) san
#用问号实现可选匹配
import re
#(xiao)?可选分组,出现零次或一次
dRegex=re.compile(r'li(xiao)?si')
mo1=dRegex.search('有个人叫lisi')
print('mo1.group()',mo1.group())
mo2=dRegex.search('他儿子叫lixiaosi。')
print('mo2.group()',mo2.group())
#尝试用来匹配不管包不包含区号
eRegex=re.compile(r'(\d\d\d-)?\d\d\d-\d\d\d\d')
mo3=eRegex.search('电话号码是:123-456-7890')
print('mo3.group()',mo3.group())
mo4=eRegex.search('电话号码是:456-7890')
print('mo4.group()',mo4.group())
输出结果:
mo1.group() lisi
mo2.group() lixiaosi
mo3.group() 123-456-7890
mo4.group() 456-7890
#用星号匹配零次或多次
import re
fRegex=re.compile(r'li(xiao)*si')
mo1=fRegex.search('有个人叫lisi')
print('mo1.group()',mo1.group())
mo2=fRegex.search('他儿子叫lixiaosi。')
print('mo2.group()',mo2.group())
mo3=fRegex.search('他孙子叫lixiaoxiaosi。')
print('mo3.group()',mo3.group())
mo4=fRegex.search('他曾孙叫lixiaoxiaoxiaosi。')
print('mo4.group()',mo4.group())
输出结果:
mo1.group() lisi
mo2.group() lixiaosi
mo3.group() lixiaoxiaosi
mo4.group() lixiaoxiaoxiaosi
#用加号匹配一次或多次
import re
gRegex=re.compile(r'li(xiao)+si')
mo1=gRegex.search('有个人叫lisi')
#print('mo1.group()',mo1.group())
if mo1==None:
print('这个人不存在')
mo2=gRegex.search('他儿子叫lixiaosi。')
print('mo2.group()',mo2.group())
mo3=gRegex.search('他孙子叫lixiaoxiaosi。')
print('mo3.group()',mo3.group())
mo4=gRegex.search('他曾孙叫lixiaoxiaoxiaosi。')
print('mo4.group()',mo4.group())
输出结果:
这个人不存在
mo2.group() lixiaosi
mo3.group() lixiaoxiaosi
mo4.group() lixiaoxiaoxiaosi
#用花括号匹配特定次数
import re
hRegex=re.compile(r'(ha){3}')
mo1=hRegex.search('hahahalalala')
print('mo1.group()',mo1.group())
mo2=hRegex.search('ha')
if mo2==None:
print('(ha){3}只能匹配到hahaha')
iRegex=re.compile(r'(ha){3,5}')
mo3=iRegex.search('hahalalalahahahahaha')
print('mo3.group()',mo3.group())
输出结果:
mo1.group() hahaha
(ha){3}只能匹配到hahaha
mo3.group() hahahahaha
#用findall()获取所有匹配结果
import re
jRegex=re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
result1=jRegex.findall('张三电话123-456-7890,李四电话234-567-8901')
print(result1)
kRegex=re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d)')
result2=jRegex.findall('张三电话123-456-7890,李四电话234-567-8901')
print(result2)
输出结果:
['123-456-7890', '234-567-8901']
['123-456-7890', '234-567-8901']
#书上说如果在正则表达式中有分组,findall会返回元组的列表,但我运行后没有,不知道为什么。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。