Python--正则表达式

来源:互联网 发布:辽宁北方广电网络 编辑:程序博客网 时间:2024/06/05 19:58
表 1-1 常见正则表达式符号和特殊字符
表示法描述正则表达式示例符号literal匹配文本字符串的字面值 literalfoore1|re2匹配正则表达式 re1 或者 re2foo|bar.匹配任何字符(除了\n之外)b.b^匹配字符串起始部分^Dear$匹配字符串终止部分/bin/*sh$*匹配0次或者多次前面出现的正则表达式[A-Za-z0-9]*+匹配1次或者多次前面出现的正则表达式[a-z]+\.com?匹配0次或者1次前面出现的正则表达式goo?{N}匹配N次前面出现的正则表达式[0-9]{3}{M,N}匹配M~N次前面出现的正则表达式[0-9]{5,9}[...]匹配来自字符集的任意单一字符[aeiou][..x-y..]匹配x~y范围中的任意单一字符[0-9],[A-Za-z][^...]不匹配此字符集中出现的任何一个字符,包括某一范围的字符[^aeiou],[^0-9](*|+|?|{})?用于匹配上面频繁出现/重复出现符号的非贪婪版本.*?[a-z](...)匹配封闭的正则表达式,然后另存为子组([0-9]{11})?特殊字符\d匹配任何十进制数字,与[0-9]一致(\D与\d相反)data\d+.txt\w匹配任何字母数字字符,与[A-Za-z0-9]相同(\W与之相反)[A-Za-z_]\w+\s匹配任何空白字符,与[\n\t\r\v\f]相同(\S与之相反)of\sthe\b匹配任何单词边界(\B与之相反)\bThe\b\N匹配已保存的子组price:\15\c逐字匹配任何特殊字符c(即,仅按照字面意义匹配,不匹配特殊含义)\*,\?\A(\Z)匹配字符串的起始(结束)(与上面的^和$相同)\ADear
\b和\B的使用场景:
正则表达式模式匹配的字符串the任何包含the的字符串\bthe任何以the开始的字符串\bthe\b仅仅匹配单词the\Bthe任何包含但并不以the作为起始的字符串

正则表达式和Python语言:
表1-2列出了来自re模块的更多常见函数和方法。本节主要介绍两个主要的函数/方法---match()和search(),以及compile()函数。
函数/方法描述仅仅是re模块函数compile(pattern,flags = 0)使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象re模块函数和正则表达式对象的方法match(pattern,string,flags=0)尝试使用带有可选的标记的正则表达式的模式来匹配字符串。如果匹配成功就返回匹配
对象;如果失败,就返回Nonesearch(pattern,string,fags=0)使用可选标记搜索字符串中第一次出现的正则表达式模式。如果匹配成功则返回匹配
对象;如果失败,则返回Nonefindall(pattern,string [,flags] )查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表finditer(pattern,string [,flags])与findall()函数相同,但返回的不是一个列表,而是一个迭代器。对于每一次匹配,迭代
器都会返回一个匹配对象split(pattern, string, max=0)根据正则表达式的模式分隔符,split函数将字符串分割为列表,然后返回成功匹配的列表
分隔最多操作max次(默认分隔所有匹配成功的位置)re模块函数和正则表达式对象方法sub(pattern,repl, string , count = 0)使用repl替换所有正则表达式的模式再字符串中出现的位置,除非定义count,否则就将
替换所有出现的位置(另见subn()函数,该函数返回替换操作的数目)purge()清除隐式编译的正则表达式模式常用的匹配对象方法group(num=0)返回整个匹配对象,或者编号为num的特定子组groups(default=None)返回一个包含所有匹配子组的元组(如果没有匹配成功,则返回一个空元组)groupdict(default=None)返回一个包含所有匹配的命名子组的字典,所有的子组名称作为字典的键(如果没有匹配
成功,则返回一个空字典)常用的模块属性re.I、re.IGNORECASE不区分大小写的匹配re.L、re.LOCAL根据所使用的本地语言环境通过\w、\W、\B、\s、\S实现匹配re.M、re.MULTILINE^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始和
结尾re.S、re.DOTALL"."(点号)通常匹配除了\n之外的所有单个字符;该标记表示"."能够匹配全部字符re.X、re.VERBOSE通过反斜线转义,否则所有空格加上#(以及在该行中所有后续文字)都将被忽略,除
非在一个字符类中或者允许注释并且提高可读性

核心提示:编译正则表达式(编译还是不编译?)
在模式匹配发生之前,正则表达式模式必须编译成正则表达式对象。由于正则表达式在执行过程中将进行多次比较操作,因此强烈建议使用预编译。而且正则表达式的编译是必须的,那么使用预编译来提升执行性能无疑是明智之举。re.compile()能够提供次功能
使用compile()函数编译正则表达式
如果需要编译,就使用编译过的方法;如果不需要编译,就使用函数。幸运的是,不管使用函数还是方法,它们的名字都是相同的(也许你曾对此感到好奇,这就是模块函数和方法的名字相同的原因,例如search()、match()等)。
匹配对象以及group()和groups()方法
当处理正则表达式时,除了正则表达式对象之外,还有另一个对象类型:匹配对象。这些是成功调用match()或者search()返回的对象。匹配对象有两个主要的方法:group()和groups()。
group()要么返回整个匹配对象,要么根据要求返回特定子组。
原创粉丝点击