Python正则表达式之基础篇
正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。 其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同。 它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式的语言里,正则表达式的语法都是一样的。 下图展示了使用正则表达式进行匹配的流程: 1.1介绍 正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。 1.2要知道的各种用法 模式字符串使用特殊的语法来表示一个正则表达式: 字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。多数字母和数字前加一个反斜杠时会拥有不同的含义。标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。反斜杠本身需要使用反斜杠转义。 由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'/t',等价于'//t')匹配相应的特殊字符。 下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。 当然这些用法很多,待会会给出经常使用到的用法,多试试就能理解了。 模式
字符类
特殊字符类
1.3re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。 re.match(pattern,string,flags = 0) pattern 正则表达式 string 匹配的字符串 flags 标志位,用来控制匹配方式,下文会讲 直接上程序: import string,re r = "abc" #正则表达式 if re.match(r,"abc"): #匹配 print 'done' else: print 'defeat' 结果: done 可以根据上面各表给出的用法,多练练: import string,re r = "a.c" #正则表达式 . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 if re.match(r,"abc"): print re.match(r,"abc") print 'done' else: print 'defeat' 结果: <_sre.SRE_Match object at 0x01dd6158> done 注意这里不是显示匹配成功的字符串,re.match() 返回的是一个对象,不成功返回的是none. 我们可以通过group(num)或groups()匹配对象函数来获取匹配表达式。
程序: import string,re r = "a.c" if re.match(r,"abc"): line = re.match(r,"abc") print line.group() else: print 'defeat' 结果: abc 1.3re.search函数 re.search() 扫描整个字符串并返回第一个成功的匹配 re.search(pattern,flags=0) pattern 正则表达式 string 匹配的字符串 flags 标志位,用于控制匹配方式 和re.match()一样,匹配成功re.search方法返回一个匹配的对象,否则返回None。 直接上程序: import string,re r = "abc" s = 'aacawcabc' if re.search(r,s): line = re.search(r,s) print line.group() 结果: abc 注意: re.match()和re.search()的区别: re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。 1.4re.sub函数 re.sub()函数用于替换匹配项。 re.sub(pattern,repl,max = 0) pattern 正则表达式 repl 替换 项 string 匹配的字符串 count 替换的最大次数 缺省值是0 表示替换所有的匹配 返回的字符串是在字符串中用 RE 最左边不重复的匹配来替换。如果模式没有发现,字符将被没有改变地返回。 程序: import string,re pattern = 'd' repl = "!" s = 'abcdefg' line = re.sub(pattern,s) print line 结果: !!!!!!!!!abcdefg 1.5正则表达式修饰符 - 可选标志 我们来说说什么是标志位: 正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:
程序: import string,re pattern = '[Aa][Bb][Cc][Dd]' s = 'AbCd' if re.match(pattern,s): line = re.match(pattern,s) print line.group() 结果: AbCd 上面程序可以通过选择标志位来实现: import string,re pattern = 'abcd' s = 'AbCd' if re.match(pattern,s,re.I): line = re.match(pattern,re.I) print line.group() 结果; AbCd 1.6re.compile函数 使用re的一般步骤是先使用re.compile()函数,将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。 程序: import string,re pattern = re.compile('d+') s = 'aabbccdd' if pattern.match(s): line = pattern.match(s) print line.group() 结果: 11223344 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |