标签:
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用。
Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。
import re # 将正则表达式编译成Pattern对象 pattern = re.compile(r‘hello‘) # 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None match = pattern.match(‘hello world!‘) if match: # 使用Match获得分组信息 print match.group()
>>> import re >>> s = ‘hello world‘ >>> print(re.match(‘ello‘, s)) None >>> print(re.search(‘ello‘,s )) <_sre.SRE_Match object; span=(1, 5), match=‘ello‘> 说明:可以看到macth只匹配开头,开头不匹配,就不算匹配到,search则可以从中间,只要能有匹配到就算匹配 findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]) 搜索string,以列表形式返回全部能匹配的子串。有点像search的扩展,把所有匹配的子串放到一个列表 参数:同match 返回值:所有匹配的子串,没有匹配则返回空列表 >>> import re >>> s = ‘one1two2three3four4‘ >>> re.findall(‘\d+‘, s) [‘1‘, ‘2‘, ‘3‘, ‘4‘]
>>> import re >>> s = ‘one1two2three3four4‘ >>> re.split(‘\d+‘, s) [‘one‘, ‘two‘, ‘three‘, ‘four‘, ‘‘]
if __name__ == ‘__main__‘: import re s = ‘--(1.1+1+1-(-1)-(1+1+(1+1+2.2)))+-----111+--++--3-+++++++---+---1+4+4/2+(1+3)*4.1+(2-1.1)*2/2*3‘ def replace_sign(expression): ‘‘‘ 替换多个连续+-符号的问题,例如+-----,遵循奇数个负号等于正否则为负的原则进行替换 :param expression: 表达式,包括有括号的情况 :return: 返回经过处理的表达式 ‘‘‘ def re_sign(m): if m: if m.group().count(‘-‘)%2 == 1: return ‘-‘ else: return ‘+‘ else: return ‘‘ expression = re.sub(‘[\+\-]{2,}‘, re_sign, expression) return expression s = replace_sign(s) print(s)
执行结果
24 +(1.1+1+1-(-1)-(1+1+(1+1+2.2)))-111+3-1+4+4/2+(1+3)*4.1+(2-1.1)*2/2*3
Python之路【第六篇】:Python基础(21)——正则表达式
标签:
原文地址:http://www.cnblogs.com/jiangnanmu/p/5595467.html