python cook book第三版 读书笔记2(第二章)

2.1用不同的分隔符分割字符串,这节主要讲了re模块里面的split()方法,因为字符串分割符可能有多种,可以用正则表达式进行匹配,如果有一种使用字符串下的split()方法即可。

>>> import re

如果用[ ]将正则表达式括起来,则分割后不包含分隔符

>>> re.split(r'[;,\s]\s*',line)
['asdf', 'ffgh', 'fvf', 'tgtrhy', 'rybryb', 'foo']

如果使用(),那么包括分隔符

>>> re.split(r'(;|,|\s)\s*',line)
['asdf', ' ', 'ffgh', ';', 'fvf', ',', 'tgtrhy', ',', 'rybryb', ',', 'foo']

2.2在字符串的开头或结尾匹配,这里作者推荐使用字符串的startswith和endswith函数,这两个函数也可以传入一个元组,匹配元组中任意一个字符串,但是不能传入列表。

>>> filename='span.txt'
>>> filename.endswith('.txt')
True
>>> filename.startswith('sd')
False

2.4匹配和查找,使用string下面的find()函数可以找到字符串的位置(从0开始)。

>>> string='as dfv erv'
>>> string.find('as')
0
>>> string.find('d')
3

使用re模块下的match()可以对字符串进行匹配

>>> text='11/27/2012'
>>> import re
>>> if re.match(r'\d+/\d+/\d+',text):
...     print yes

如果一个正则表达式需要反复使用,可以使用compile()先将其赋给一个变量,之后进行匹配

>>> datepat=re.compile(r'\d+/\d+/\d+')
>>> if datepat.match(text):
...     print 'yes'
...
yes

在一个字符串中找出所有匹配的文本,使用findall()方法,返回所有文本的一个列表,还可以在循环中使用finditer()返回每个匹配的项。

2.5替换字符串里的字符,这里我们可以使用replace替换字符

>>> text
'11/27/2012'
>>> text.replace('2012','2014')
'11/27/2014'

也可以使用sub来替换,sub可以传入三个参数,第一个匹配行想要替换字符串中的子串,第二个匹配想替换成的格式,第三个是字符串。

>>> text='today is 11/27/2012.PyCon starts 3/13/2013.'
>>> re.sub(r'(\d+)/(\d+)/(\d+)',r'\3-\1-\2',text)
'today is 2012-11-27.PyCon starts 2013-3-13.'

也可以使用上文提到的compile()结合sub使用。

>>> datepat=re.compile(r'(\d+)/(\d+)/(\d+)')
>>> datepat.sub(r'\3-\1-\2',text)
'today is 2012-11-27.PyCon starts 2013-3-13.'

使用subn可以返回新字符串并且返回匹配几处

>>> newtext,n=datepat.subn(r'\3-\1-\2',text)
>>> newtext
'today is 2012-11-27.PyCon starts 2013-3-13.'
>>> n
2

2.6在使用sub时候,可以在最后加入标签 例如flag=re.IGNORECASE忽略大小写。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值