Python字符串及文本模式方法详解
一、你想在字符串中搜索和匹配指定的文本模式
遗漏点:re模块其实也是帮助我们进行字符串处理的重要工具,我之前总是想着用内建的函数来处理,其实如果是复杂的文本和数据结构,re模块能帮助我们处理很多信息。
对于简单的字面模式,直接使用str.replace()方法即可,比如:
>>>text='yeah,butno,butyeah,butno,butyeah'
>>>text.replace('yeah','yep')
'yep,butno,butyep,butno,butyep'
>>>
对于复杂的模式,请使用re模块中的sub()函数。为了说明这个,假设你想将形式为11/27/2012的日期字符串改成2012-11-27。示例如下:
>>>text='Todayis11/27/2012.PyConstarts3/13/2013.'
>>>importre
>>>re.sub(r'(\d+)/(\d+)/(\d+)',r'\3-\1-\2',text)
'Todayis2012-11-27.PyConstarts2013-3-13.'
二、你需要以忽略大小写的方式搜索与替换文本字符串
为了在文本操作时忽略大小写,你需要在使用re模块的时候给这些操作提供re.IGNORECASE标志参数。比如:
>>>text='UPPERPYTHON,lowerpython,MixedPython'
>>>re.findall('python',text,flags=re.IGNORECASE)
['PYTHON','python','Python']
>>>re.sub('python','snake',text,flags=re.IGNORECASE)
'UPPERsnake,lowersnake,Mixedsnake'
最后的那个例子揭示了一个小缺陷,替换字符串并不会自动跟被匹配字符串的大小写保持一致。为了修复这个,你可能需要一个辅助函数,就像下面的这样:
defmatchcase(word): defreplace(m): text=m.group() iftext.isupper(): returnword.upper() eliftext.islower(): returnword.lower() eliftext[0].isupper(): returnword.capitalize() else: returnword returnreplace
>>>re.sub('python',matchcase('snake'),text,flags=re.IGNORECASE)
'UPPERSNAKE,lowersnake,MixedSnake'
matchcase('snake')返回了一个回调函数(参数必须是match对象),sub()函数除了接受替换字符串外,还能接受一个回调函数。
三、你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配
>>>comment=re.compile(r'/\*(.*?)\*/')
>>>text1='/*thisisacomment*/'
>>>text2='''/*thisisa
...multilinecomment*/
...'''
>>>
>>>comment.findall(text1)
['thisisacomment']
>>>comment.findall(text2)
re.compile()函数接受一个标志参数叫re.DOTALL,在这里非常有用。它可以让正则表达式中的点(.)匹配包括换行符在内的任意字符。比如:
>>>comment=re.compile(r'/\*(.*?)\*/',re.DOTALL)
>>>comment.findall(text2)
['thisisa\nmultilinecomment']
四、你想通过某种对齐方式来格式化字符串
于基本的字符串对齐操作,可以使用字符串的ljust(),rjust()和center()方法。比如:
>>>text='HelloWorld'
>>>text.ljust(20)
'HelloWorld'
>>>text.rjust(20)
'HelloWorld'
>>>text.center(20)
'HelloWorld'
>>>text.rjust(20,'=')
'=========HelloWorld'
>>>text.center(20,'*')
'****HelloWorld*****'
>>>
函数format()同样可以用来很容易的对齐字符串。你要做的就是使用<,>或者^字符后面紧跟一个指定的宽度。比如:
>>>format(text,'>20')
'HelloWorld'
>>>format(text,'<20')
'HelloWorld'
>>>format(text,'^20')
'HelloWorld'
>>>
如果你想指定一个非空格的填充字符,将它写到对齐字符的前面即可:
>>>format(text,'=>20s')
'=========HelloWorld'
>>>format(text,'*^20s')
'****HelloWorld*****'
>>>
当格式化多个值的时候,这些格式代码也可以被用在format()方法中。比如:
>>>x=1.2345
>>>format(x,'>10')
'1.2345'
>>>format(x,'^10.2f')
'1.23'
>>>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。