字符串与正则表达python_(董付国)Python 学习笔记---Python字符串与正则表达式(3)...

4.2正则表达式

正则表达式是字符串处理的有力工具和技术。

正则表达式是使用某种预定义的模式去匹配一类具有共同特征的字符串,主要用于处理字符串,可以快速、准确地完成复杂的查找、替换等处理要求,在文本编辑与处理、网页爬虫之类的场合中有重要作用。

Python中,re模块提供了正则表达式操作所需要的功能。

4.2.2re模块主要方法

4.2.3直接使用re模块方法

>>> import re #导入re模块

>>> text = 'alpha,beta....gamma delta' #测试用的字符串

>>> re.split('[\. ]+',text) #使用指定字符作为分隔符进行分隔

['alpha,beta', 'gamma', 'delta']

>>> re.split('[\. ]+',text,maxsplit = 1) #最多分隔两次

['alpha,beta', 'gamma delta']

>>> re.split('[\. ]+',text,maxsplit = 2) #最多分隔两次

['alpha,beta', 'gamma', 'delta']

>>> pat = '[a-zA-Z]+'

>>> re.findall(pat,text) #查找所有单词

['alpha', 'beta', 'gamma', 'delta']

>>> pat = '{name}'

>>> text = 'Dear {name}...'

>>> re.sub(pat,'Mr.Dong',text) #在text中寻找与pat匹配的项,用‘Mr.Dong ’替换

'Dear Mr.Dong...'

>>> s = 'a s d'

>>> re.sub('a|s|d','Good',s) #字符串替换

'Good Good Good'

>>> s = "It's a very good good idea"

"It's a very good idea"

>>> re.sub(r'((\w+) )\1',r'\2',s) #处理连续的重复单词

"It's a very goodidea"

>>> re.sub('a',lambda x:x.group(0).upper(),'aaa abc abde') #repl为可调用对象

'AAA Abc Abde'

>>> re.sub('[a-z]',lambda x:x.group(0).upper(),'aaa abc abde')

'AAA ABC ABDE'

>>> re.sub('[a-zA-Z]',lambda x:chr(ord(x.group(0))^32),'aaa abc abde') #ord是转化成ascii码,chr是转化成字母

'AAA ABC ABDE'

>>> re.subn('a','dfg','aaa abc abde')

('dfgdfgdfg dfgbc dfgbde', 5)

>>> #返回新字符串和替换次数

>>> re.sub('a','dfg','aaa abc abde')

'dfgdfgdfg dfgbc dfgbde'

>>> re.escape('http://www.python.org') #字符串转义

'http://www\\.python\\.org'

4.2.4使用正则表达式对象

首先使用re模块的compile()方法将正则表达式编译生成正则表达式对象,然后再使用正则表达式对象提供的方法进行字符串处理。

使用编译后的正则表达式对象可以提高字符串处理速度。

正则表达式对象的match(string[, pos[, endpos]])方法用于在字符串开头或指定位置进行搜索,模式必须出现在字符串开头或指定位置;

正则表达式对象的search(string[, pos[, endpos]])方法用于在整个字符串中进行搜索;

正则表达式对象的findall(string[, pos[, endpos]])方法用于在整个字符串中进行搜索;

正则表达式对象的findall(string[, pos[, endpos]])方法用于在字符串中查找所有符合正则表达式的字符串列表。

sub()、subn();正则表达式对象的sub(repl,string[,count = 0])和subn(repl,string[,count = 0])方法用来实现字符串替换功能,其中参数rep可以为字符串或返回字符串的可调用对象。

正则表达式对象的split(string[,maxsplit = 0])方法用来实现字符串分隔。

4.2.5子模式与match对象

使用()表示一个子模式,括号中的内容作为一个整体出现,例如‘(red)+’可以匹配‘redred’、‘redredred’等多个重复‘red’的情况。

>>> re.sub('a','dfg','aaa abc abde')

'dfgdfgdfg dfgbc dfgbde'

>>> re.escape('http://www.python.org') #字符串转义

'http://www\\.python\\.org'

>>>

>>>

>>> telNumber = '''Suppose my Phon No.is 0535-1234567,yours if 010-12345678,his is 025-87654321.'''

>>> pattern = re.compile(r'(\d{3,4})-(\d{7,8})')

>>> pattern.findall(telNumber)

[('0535', '1234567'), ('010', '12345678'), ('025', '87654321')]

子模式扩展语法:

正则表达式对象的match方法和search方法匹配成功后返回match对象。match对象的主要方法有:

match() 对象的用法

>>> m = re.match(r"(\w+) (\w+)","Isaac Newton,physicist")

>>> m.group(0) #返回整个模式内容

'Isaac Newton'

>>> m.group(1) #返回第1个子模式内容

'Isaac'

>>> m.group(2) #返回第2个子模式内容

'Newton'

>>> m.group(1,2) #返回指定的多个子模式内容

('Isaac', 'Newton')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值