首页 / 操作系统 / Linux / Python 正则表达式基础
正则表达式对于初学者来说,要用好这个功能还是有点难度,也看了好久书加练习才掌握一些基础。对学到的一些东西还是写下来比较好一些,免得过几天又忘了。常用符号:. * ? ()常用方法: findall search sub常用技巧1 Python 正则式的基本用法 Python 通过标准库re模块支持正则表达式。>>> import re>>> string = "XXXIXXXLoveXXX">>> re.findall("XXX(.*?)XXX", string)["I"]>>>在python术语中,有两种主要方法完成模式匹配:serarching 和matching.
搜索:在字符串中任意部分中搜索匹配模式。匹配:判断一个字符串是否能从起始位置全部或部分匹配某个模式。常用正则符号字符如下图:a. 基本规则"." 匹配所有字符匹配除换行符 "
" 外的所有字符。如果使用了 "S" 选项,匹配包括 "
" 的所有字符。要明确的匹配一个".",必须使用’‘对它进行转义。>>> s = """XXX
IXXX"""
>>> re.findall(".+", s)
["XXX", "IXXX"]
>>> re.findall(".+", s, re.S)
["XXX
IXXX"]
>>>b. 对基本规则作限定(闭包操作符)"*" 0 或多次匹配。常用.*(贪心算法)>>> x = "abc2323sf23">>> re.findall("c.*s", x)["c2323s"]>>>
"+" 1 次或多次匹配>>> x = "abc2323sf23">>> re.findall("cd+s", x)["c2323s"]>>>
"?" 0 或 1 次匹配。常用.*?(非谈心算法)>>> x = "abc2323sf23">>> re.findall("cd?", x)["c2"]>>> re.findall("cd+?", x)["c2"]>>> re.findall("c.*?", x)["c"]
‘{m}"精确匹配 m 次‘{m,n}"匹配最少 m 次,最多 n 次2. ()创建组一对()和正则表达式一起使用可达到: a. 对正则进行分组 b. 匹配子组>>> s= "XXXIXXXLOVEXXXYOU">>> re.findall("XXX(.*)XXX(.*)XXX(.*)", s)[("I", "LOVE", "YOU")]>>>可以看到 findall 函数只返回了包含在 ’()’ 中的内容,而虽然前面和后面的内容都匹配成功了,却并不包含在结果中。3. 常用函数findall(pattern, string[,flags])在目标字符串中查找符合规则的字符串。第一个参数是规则,第二个参数是目标字符串,后面还可以跟一个规则选项。返回结果结果是一个列表, 中间存放的是符合规则的字符串。如果没有符合规则的字符串被找到,就返回一个空列表。常用规则选项I IGNORECASE 忽略大小写区别。L LOCAL 字符集本地化。这个功能是为了支持多语言版本的字符集使用环境的,比如在转义符/w ,在英文环境下,它代表[a-zA-Z0-9] ,即所以英文字符和数字。如果在一个法语环境下使用,缺省设置下,不能匹配 "é" 或 "ç" 。 加上这 L 选项和就可以匹配了。不过这个对于中文环境似乎没有什么用,它仍然不能匹配中文字符。M MULTILINE 多行匹配。在这个模式下 ’^’( 代表字符串开头 ) 和 ’$’( 代表字符串结尾 ) 将能够匹配多行的情况,成为行首和行尾标记。当我们调用findall()方法,我们可以非常简单的得到一个所有匹配模式的 列表,而不是得到对象。>>> string = "bird cat bird, cat dog"
>>> s = re.findall(r"cat", string)
>>> s
["cat", "cat"]
>>>match 与 searchmatch( pattern, string, flags = 0)search( pattern, string, flags = 0)match函数尝试从字符串的开头开始对模式进行匹配,如果匹配成功,就返回一个匹配对象,如果失败返回空,匹配对象的group()方法可以用来显示那个成功的匹配。search函数工作方式和match一样,这两个函数唯一的区别是: match 从字符串的开头开始匹配,如果开头位置没有匹配成功,就算失败了;而 search 会跳过开头,继续向后寻找是否有匹配的字符串。常见例子: 对字符串"bird cat bird"调用mathch()方法,查找模式"bird"将会匹配:>>> re.match(r"bird", "cat bird cat")
>>> string = "bird cat bird"
>>> s = re.match(r"bird", string)
>>> s
<_sre.SRE_Match object at 0x0000000003104D30>
>>> s.group()
"bird"
>>> s = re.match(r"cat", string)
>>> s
>>>但是,如果我们对同一个字符串调用math()方法,查找模式"cat",则不会找到匹配。而search()结果则不一样,search()方法会在它查找到一个匹配项之后停止继续查找,并返回其首次出现的位置。>>> string = "bird cat bird"
>>> s = re.search(r"cat", string)
>>> s
<_sre.SRE_Match object at 0x0000000003104D30>
>>> s.group()
"cat"
>>>分组示例:即:上面提到的"()"号,对整个正则表达式的特定子串进行定位的能力。我们可以定义一个分组做为整个正则表达式的一部分,然后单独的对这部分对应匹配到的内容定位。>>> string = "name: Tom, phone: 12344"
>>> s = re.findall(r"(.*): (.*), phone: (d+)",string)
>>> s
[("name", "Tom", "12344")]
>>> s = re.search(r"(.*): (.*), phone: (d+)",string)
>>> s
<_sre.SRE_Match object at 0x0000000002F54AE0>
>>> s.group(1)
"name"
>>> s.group(2)
"Tom"
>>> s.group(3)
"12344"
>>>通过用圆括号来(字符‘(’和‘)’)包围正则表达式的特定部分,可以对内容进行分组然后对这些子组做单独处理。下面关于Python的文章您也可能喜欢,不妨看看:CentOS 7安装Python3.5 http://www.linuxidc.com/Linux/2016-04/129784.htmLinux下Python的安装以及注意事项 http://www.linuxidc.com/Linux/2015-11/124861.htmUbuntu 14.04 下安装使用Python rq模块 http://www.linuxidc.com/Linux/2015-08/122441.htm无需操作系统直接运行 Python 代码 http://www.linuxidc.com/Linux/2015-05/117357.htmCentOS上源码安装Python3.4 http://www.linuxidc.com/Linux/2015-01/111870.htm《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htmPython脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm在Ubuntu下用Python搭建桌面算法交易研究环境 http://www.linuxidc.com/Linux/2013-11/92534.htmPython 语言的发展简史 http://www.linuxidc.com/Linux/2014-09/107206.htmPython 的详细介绍:请点这里
Python 的下载地址:请点这里 本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/129983.htm