Python正则表达式
来源:互联网 发布:魅丽文化网络编辑招聘 编辑:程序博客网 时间:2024/06/03 10:48
Python正则表达式
正则表达式是字符一个特殊的序列,可帮助匹配或者寻找其他的字符串或一组字符串,用一个模式支持一个专门的语法。正则表达式被广泛应用于UNIX世界中。
模块re在Python提供类似Perl的正则表达式全面支持。 re模块引发异常re.error如果在编译或使用正则表达式时发生错误。
我们将涉及两个重要的功能,这将被用于处理的正则表达式。但是首先:有各种各样的字符,当它们在正则表达式中使用,将有特殊的意义。为了避免在处理正则表达式的任何困惑,将使用原始字符串作为r'expression“。
match函数
此函数会尝试重新模式匹配字符串可选标志。
下面是此函数的语法:
re.match(pattern,string, flags=0)
这里的参数的说明:
参数
描述
pattern
这是正则表达式来进行匹配。
string
这是字符串,这将被搜索匹配的模式,在字符串的开头。
flags
可以指定使用位的不同的标志OR (|)。这些改性剂,其列于下表中。
re.match函数返回成功,失败匹配对象则返回None。我们会group(num) orgroups()函数匹配对象来获得匹配的表达式。
匹配对象的方法
描述
group(num=0)
此方法返回整个匹配(或指定分组num)
groups()
此方法返回所有元组匹配的子组(空,如果没有)
例子:
#!/usr/bin/python
import re
line ="Cats aresmarter than dogs"
matchObj = re.match( r'(.*) are (.*?).*', line, re.M|re.I)
if matchObj:
print"matchObj.group(): ", matchObj.group()
print"matchObj.group(1): ", matchObj.group(1)
print"matchObj.group(2): ", matchObj.group(2)
else:
print"Nomatch!!"
当执行上面的代码,它产生以下结果:
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
search函数
此函数将搜索字符串中使用可选的标志第一次出现的RE模式。
下面是此函数语法:
re.search(pattern,string, flags=0)
这里的参数说明:
参数
描述
pattern
这是正则表达式来进行匹配。
string
这是字符串,这将被搜索到的字符串中的任何位置匹配的模式。
flags
可以指定使用位的不同的标志OR (|)。这些改性剂,其列于下表中。
re.search函数返回成功,没有失败的匹配对象。我们会用group(num) 或groups() 函数来获得匹配的表达式。
匹配对象的方法
描述
group(num=0)
此方法返回整个匹配(或指定分组num)
groups()
此方法返回所有元组匹配的子组(空,如果没有)
例子:
#!/usr/bin/python
import re
line ="Cats aresmarter than dogs";
searchObj = re.search( r'(.*) are (.*?).*', line, re.M|re.I)
if searchObj:
print"searchObj.group(): ", searchObj.group()
print"searchObj.group(1): ", searchObj.group(1)
print"searchObj.group(2): ", searchObj.group(2)
else:
print"Nothingfound!!"
当执行上面的代码,它产生以下结果:
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
匹配VS搜索:
python提供基于正则表达式两种不同的基本操作:只在字符串的开头匹配检查的匹配,而对于一个匹配字符串中的任何位置搜索检查(这是Perl并在默认情况下)。
例子:
#!/usr/bin/python
import re
line ="Cats aresmarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print"match--> matchObj.group() : ", matchObj.group()
else:
print"Nomatch!!"
searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
print"search--> searchObj.group() : ", searchObj.group()
else:
print"Nothingfound!!"
当执行上面的代码,产生以下结果:
No match!!
search --> matchObj.group() : dogs
搜索和替换:
一些最重要的re方法,使用正则表达式sub。
语法
re.sub(pattern, repl,string, max=0)
这种方法取代了RE模式字符串中使用的Perl所有匹配,替换所有出现如果提供最大匹配。这个方法将返回修改后的字符串。
例子
下面是一个例子:
#!/usr/bin/python
import re
phone ="2004-959-559# This is Phone Number"
# Delete Python-style comments
num = re.sub(r'#.*$',"", phone)
print"Phone Num : ", num
# Remove anything other than digits
num = re.sub(r'\D',"", phone)
print"Phone Num : ", num
当执行上面的代码,产生以下结果:
Phone Num : 2004-959-559
Phone Num : 2004959559
正则表达式修饰符 - 选项标志
正则表达式字面可以包含一个可选的修饰符来控制匹配的各个方面。修饰符被指定为一个可选的标志。可以使用异或提供多个修饰符(|),如先前所示,并且可以由这些中的一个来表示:
修辞符
描述
re.I
执行不区分大小写的匹配。
re.L
根据当前的语言环境解释词组。这种解释影响字母组(\w和\W),以及单词边界的行为(\b和\B)
re.M
使$匹配一行(串的不只是端部)的尾部,使^匹配的行(串不只是开始)的开始
re.S
使一个句号(点)匹配任何字符,包括换行符
re.U
根据Unicode字符集解释的字母。这个标志会影响\w, \W, \b, \B的行为。
re.X
许可证“cuter”正则表达式语法。它忽略空格(除了一组[]或当用一个反斜杠转义内),并把转义#作为注释标记
正则表达式模式:
除了控制字符(+ ? . * ^$ ( ) [ ] { } | \),所有字符匹配自己。可以通过用反斜杠前就转义控制字符。
下表列出了Python中可用正则表达式语法:
模式
描述
^
匹配的开始的
$
匹配行尾
.
匹配除换行符的任何单个字符。使用-m选项允许其匹配换行符也是如此。
[...]
匹配括号内任何单个字符
[^...]
匹配任何单个字符不在括号中
re*
匹配0个或多个匹配前面表达式。
re+
匹配1个或多个先前出现的表达式。
re?
匹配0或1前面出现的表达式。
re{ n}
精确匹配n个前面表达式的数量。
re{ n,}
匹配n或多次出现上述表达式。
re{ n, m}
匹配至少n次和前面表达式的大多数出现m次。
a| b
匹配a或b。
(re)
组正则表达式并记住匹配的文本。
(?imx)
暂时切换上 i, m 或 x正则表达式的选项。如果括号中,仅该区域受到影响。
(?-imx)
暂时关闭切换 i, m, 或 x 正则表达式的选项。如果括号中,仅该区域受到影响。
(?: re)
组正则表达式而不匹配的记住文字。
(?imx: re)
暂时切换上i, m, 或 x 括号内的选项。
(?-imx: re)
暂时关闭切换i, m, 或 x 括号内的选项。
(?#...)
注释
(?= re)
指定使用的模式位置,没有一个范围。
(?! re)
指定使用模式取反位置,没有一个范围。
(?> re)
匹配独立的模式而不反向追踪。
\w
匹配单词字符。
\W
匹配非单词字符
\s
匹配的空白,等价于[\ t\ñ\ r\ F]
\S
匹配非空白
\d
匹配的数字。等价于[0-9]
\D
匹配非数字
\A
匹配字符串的开始
\Z
匹配字符串的结尾。如果一个换行符的存在,它只是换行之前匹配
\z
匹配字符串的结尾
\G
匹配点,最后一次匹配结束
\b
匹配单词边界之外时,括号内。匹配退格键(0×08),括号里面的时候
\B
匹配非单词边界
\n, \t, etc.
匹配换行符,回车符,制表符等
\1...\9
匹配第n个分组的子表达式。
\10
匹配,如果它已经匹配第n个分组的子表达式。否则指的是一个字符码的八进制表示。
正则表达式的例子
文字字符:
示例
描述
python
匹配 "python".
字符类:
示例
描述
[Pp]ython
匹配 "Python" 或 "python"
rub[ye]
匹配 "ruby" 或 "rube"
[aeiou]
匹配任何一个小写元音
[0-9]
匹配任何数字;如果[0123456789]
[a-z]
匹配任何小写ASCII的字母
[A-Z]
匹配任何大写的ASCII字母
[a-zA-Z0-9]
匹配任何上述的
[^aeiou]
匹配任何不是小写元音
[^0-9]
匹配任何非数字
特殊字符类:
示例
描述
.
匹配除换行符外的任何字符
\d
匹配一个数字:[0-9]
\D
匹配一个非数字:[^0-9]
\s
匹配一个空白字符:[\ t\ r\ñ\ F]
\S
匹配非空白:[^\ t\ r\ñ\ F]
\w
匹配一个单词字符:[A-ZA-Z0-9 _]
\W
匹配非单词字符:[^ A-ZA-Z0-9 _]
重复案例:
示例
描述
ruby?
匹配“rub”或“ruby”:y是可选的
ruby*
匹配“rub”加上0个或多个ys
ruby+
匹配“rub”加上1个或多个ys
\d{3}
完全匹配3个数字
\d{3,}
完全匹配3个及以上的数字
\d{3,5}
匹配3,4或5个数字
非贪婪的重复:
匹配最小重复次数:
示例
描述
<.*>
贪婪的重复:匹配“<python>perl>”
<.*?>
非贪婪:匹配“<python>”,在“<python>perl>”
分组使用括号:
示例
描述
\D\d+
不分组:+重复\d
(\D\d)+
分组:+重复\D\d对
([Pp]ython(, )?)+
匹配“Python”,“Python, python, python”等。
反向引用:
再次匹配先前匹配的组:
示例
描述
([Pp])ython&\1ails
匹配python&pails或Python&Pails
(['"])[^\1]*\1
单或双引号字符串。 \1匹配第一组匹配。 \2匹配第二组匹配等等。
替代方案:
示例
描述
python|perl
匹配"python" 或 "perl"
rub(y|le))
匹配 "ruby" 或 "ruble"
Python(!+|\?)
“Python”后跟一个或多个!或者一个?
锚点:
需要指定匹配位置
示例
描述
^Python
匹配“Python”在一个字符串或内部行的开始
Python$
匹配“巨蟒”的字符串或行尾
\APython
匹配“Python”在字符串的开始
Python\Z
匹配“Python”在字符串的结尾
\bPython\b
匹配“Python”在字边界
\brub\B
\B非单词的边界:匹配“rub”,“rube”和“ruby”,但并不单独
Python(?=!)
匹配“Python”,如果后面的感叹号
Python(?!!)
匹配“Python”,如果后面不是感叹号
特殊的语法用圆括号:
示例
描述
R(?#comment)
符合“R”。其余全是注释
R(?i)uby
当匹配“uby”时,不区分大小写
R(?i:uby)
与上述相同
rub(?:y|le))
只有组,而无需创建\1反向引用
- python正则表达式学习
- c++正则表达式,python
- Python正则表达式(一)
- python的正则表达式
- Python正则表达式
- Python初学-正则表达式
- 正则表达式与python
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- python正则表达式
- Python - 正则表达式
- Python正则表达式
- python正则表达式
- Python正则表达式指南
- Python正则表达式指南
- Python 正则表达式指南
- python 正则表达式
- 工作杂谈之:程序员为什么离职
- poj 2442Sequence 优先队列的运用
- Intellij IDE 注册
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
- [算法导论] 单源最短路径 - Dijkstra 学习笔记
- Python正则表达式
- LeetCode--Unique Binary Search Trees II
- Android开发~Sildingmenu
- nyoj1022 合纵连横 ---支持合并,删除,查找的并查集
- [leetcode 74] Search a 2D Matrix
- HSDB时,关于解决UnsatisfiedLinkError sawindbg.dll的问题笔记
- pdb调试python
- PHP中使用COM类进行访问
- 黑马程序员——Jave面向对象一