Python 正则表达式语法

Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。Python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。

Python 正则表达式语法

正则表达式可以包含普通字符和特殊字符,普通字符(比如数字或者字母)可以直接对目标字符串进行匹配,在本文中我们主要讨论利用特殊字符来模糊匹配某一些字符串的方法,比如’|’或者'(‘,使用这些特殊字符,正则表达式可以表示某一类的普通字符,或者是改变其周围的正则表达式的含义。

表 1. 正则表达式语法

符号 意义 例子
. 表示任意字符,如果说指定了 DOTALL 的标识,就表示包括新行在内的所有字符。
^ 表示字符串开头。
$ 表示字符串结尾。 ‘ test ’ 可以匹配‘ test ’和‘ testtool ’,但‘ test$ ’只能匹配‘ test ’。
*, +, ? ‘*’表示后面可跟 0 个或多个字符,’+’表示后面可跟 1 个或多个字符,’?’表示后面可跟 0 个或多个字符 ‘ abc* ’可以匹配‘ abc ’ 或者‘ abcd ’或者‘ abcdefg ’等等。
*?, +?, ?? 在上面的结果中只去第一个 <*> 会匹配'<H1>title</H1>’整个字符串(贪婪匹配),使用 *? 可以只找出 <H1>(非贪婪匹配)
{m} 对于前一个字符重复 m 次 a{6} 匹配 6 个’a’
{m,n} 对于前一个字符重复 m 到 n 次 a{2,4} 匹配 2-4 个 a,a{2,} 匹配 2 个以上 a,a{,4} 匹配 4 个以下 a
{m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串’aaaaaa’中,a{2,4} 会匹配 4 个 a,但 a{2,4}? 只匹配 2 个 a
\ 对特殊字符进行转义,或者是指定特殊序列
[] 表示一个字符集 [abc] 会匹配字符 a,b 或者 c,[a-z] 匹配所有小写字母,[a-zA-Z0-9] 匹配所有字母和数字,[^6] 表示除了 6 以外的任意字符
| 或者,只匹配其中一个表达式 A|B,如果 A 匹配了,则不再查找 B,反之亦然
( … ) 匹配括号中的任意正则表达式
(?#…) 注释,忽略括号内的内容
(?= … ) 表达式’…’之前的字符串 在字符串’ pythonretest ’中 (?=test) 会匹配’ pythonre ’
(?!…) 后面不跟表达式’…’的字符串 如果’ pythonre ’后面不是字符串’ test ’,那么 (?!test) 会匹配’ pythonre ’
(?<= … ) 跟在表达式’…’后面的字符串符合括号之后的正则表达式 正则表达式’ (?<=abc)def ’会在’ abcdef ’中匹配’ def ’
(?<!…) 括号之后的正则表达式不跟在’…’的后面

表 2. 正则表达式特殊序列

特殊表达式序列 意义
\A 只在字符串开头进行匹配。
\b 匹配位于开头或者结尾的空字符串
\B 匹配不位于开头或者结尾的空字符串
\d 匹配任意十进制数,相当于 [0-9]
\D 匹配任意非数字字符,相当于 [^0-9]
\s 匹配任意空白字符,相当于 [ \t\n\r\f\v]
\S 匹配任意非空白字符,相当于 [^ \t\n\r\f\v]
\w 匹配任意数字和字母,相当于 [a-zA-Z0-9_]
\W 匹配任意非数字和字母的字符,相当于 [^a-zA-Z0-9_]
\Z 只在字符串结尾进行匹配

参考:http://docs.python.org/2/library/re.html

http://www.ibm.com/developerworks/cn/opensource/os-cn-pythonre/index.html

About 智足者富

http://chenpeng.info

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>