Java及python正则表达式详解
正则表达式语法及常用元字符: 正则表达式有元字符及不同组合来构成,通过巧妙的构造正则表达式可以匹配任意字符串,并完成复杂的字符串处理任务。 常用的元字符有: 其中在使用反斜线时要注意:如果以‘'开头的元字符与转义字符相同,则需要使用‘'或者原始字符串,在字符串前面加上字符‘r'或‘R'。原始字符串可以减少用户的输入,主要用于‘',主要用于正则表达式和文件路径字符串,如果字符串以一个‘'结束,则需要多加一个斜线,以‘'结束。 &; :将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'n' 匹配一个换行符。序列 '' 匹配 "" 而 "(" 则匹配 "("。 常用正则表达式的写法: ‘[a-zA-Z0-9]':匹配字母或数字 re模块常用方法介绍: compile(pattern[,flags])创建模式对象 match,search,findall区别 match在字符串开头或指定位置进行搜索,模式必须出现在开头或指定位置; 子模式与match对象 正则表达式中match和search方法匹配成功后都会返回match对象,其中match对象的主要方法有group()(返回匹配的一个或多个子模式内容),groups()(方法返回一个包含匹配所有子模式内容的元组),groupdict()(方法返回一个包含匹配所有子模式内容的字典),start()(返回子模式内容的起始位置),end()(返回子模式内容的结束位置)span()(返回包含指定子模式内容起始位置和结束位置前一个位置的元组) 代码演示 >>> import re >>> m = re.match(r'(w+) (w+)','Isaac Newton,physicist') >>> m.group(0) 'Isaac Newton' >>> m.group(1) 'Isaac' >>> m.group(2) 'Newton' >>> m.group(1,2) ('Isaac','Newton') >>>m=re.match(r'(?P<first_name>w+)(?P<last_name>w+)','Malcolm Reynolds') >>> m.group('first_name') 'Malcolm' >>> m.group('last_name') 'Reynolds' >>> m.groups() ('Malcolm','Reynolds') >>> m.groupdict() {'first_name': 'Malcolm','last_name': 'Reynolds'} 验证并理解子模式扩展语法的功能 >>> import re >>> exampleString = '''There should be one--and preferably only one--obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never never is often better than right now.''' >>> pattern = re.compile(r'(?<=ws)never(?=sw)') >>> matchResult = pattern.search(exampleString) >>> matchResult.span() (171,176) >>> pattern = re.compile(r'(?<=ws)never') >>> matchResult = pattern.search(exampleString) >>> matchResult.span() (154,159) >>> pattern = re.compile(r'(?:iss)better(sthan)') >>> matchResult = pattern.search(exampleString) >>> matchResult.span() (139,153) >>> matchResult.group(0) 'is better than' >>> matchResult.group(1) ' than' >>> pattern = re.compile(r'b(?i)nw+b') >>> index = 0 >>> while True: matchResult = pattern.search(exampleString,index) if not matchResult: break print(matchResult.group(0),':',matchResult.span(0)) index = matchResult.end(0) not : (90,93) Now : (135,138) never : (154,159) never : (171,176) never : (177,182) now : (210,213) >>> pattern = re.compile(r'(?<!nots)beb') >>> index = 0 >>> while True: matchResult = pattern.search(exampleString,matchResult.span(0)) index = matchResult.end(0) be : (13,15) >>> exampleString[13:20] 'be one-' >>> pattern = re.compile(r'(bw*(?P<f>w+)(?P=f)w*b)') >>> index = 0 >>> while True: matchResult = pattern.search(exampleString,matchResult.group(2)) index = matchResult.end(0)+1 unless : s better : t better : t >>> s = 'aabc abbcd abccd abbcd abcdd' >>> p = re.compile(r'(bw*(?P<f>w+)(?P=f)w*b)') >>> p.findall(s) [('aabc','a'),('abbcd','b'),('abccd','c'),('abcdd','d')] 以上就是关于python正则表达式的相关内容,更多资料请查看编程小技巧以前的文章。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |