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忽略大小写。