学Python正则表达式,这一篇就够了
正则表达式是一个特殊的字符序列,可以帮助您使用模式中保留的专门语法来匹配或查其他字符串或字符串集。 正则表达式在UNIX世界中被广泛使用。
注:很多开发人员觉得正则表达式比较难以理解,主要原因是缺少使用或不愿意在这上面花时间。
re模块在Python中提供对Perl类正则表达式的完全支持。如果在编译或使用正则表达式时发生错误,则re模块会引发异常re.error。
在这篇文章中,将介绍两个重要的功能,用来处理正则表达式。 然而,首先是一件小事:有各种各样的字符,这些字符在正则表达式中使用时会有特殊的意义。 为了在处理正则表达式时避免混淆,我们将使用:r'expression'原始字符串。
匹配单个字符的基本模式
编号 | 表达式 | 描述 |
1 | a, X, 9, < | 普通字符完全匹配。 |
2 | . | 匹配任何单个字符,除了换行符’\n' |
3 | \w | 匹配“单词”字符:字母或数字或下划线[a-zA-Z0-9_]。 |
4 | \W | 匹配任何非字词。 |
5 | \b | 字词与非字词之间的界限 |
6 | \s | 匹配单个空格字符 : 空格,换行符,返回,制表符 |
7 | \S | 匹配任何非空格字符。 |
8 | \t, \n, \r | 制表符,换行符,退格符 |
9 | \d | 十进制数[0-9] |
10 | ^ | 匹配字符串的开头 |
11 | $ | 匹配字符串的末尾 |
12 | \ | 抑制字符的“特殊性”,也叫转义字符。 |
编译标志
编译标志可以修改正则表达式的某些方面。标志在re模块中有两个名称:一个很长的名称,如IGNORECASE,和一个简短的单字母形式,如。
编号 | 标志 | 含义 |
1 | ASCII, A | 像\w,\b,\s和\d之间的几个转义只匹配ASCII字符与相应的属性。 |
2 | DOTALL, S | 匹配任何字符,包括换行符 |
3 | IGNORECASE, I | 不区分大小写匹配 |
4 | LOCALE, L | 做一个区域感知的匹配 |
5 | MULTILINE, M | 多行匹配,影响^和$ |
6 | VERBOSE, X (for 'extended’) | 启用详细的RE,可以更干净,更容易理解 |
1.match函数
此函数尝试将RE模式与可选标志的字符串进行匹配。
下面是函数的语法 :
re.match(pattern, string, flags = 0)12复制代码类型:[python]
这里是参数的描述 :
pattern : 这是要匹配的正则表达式。
string : 这是字符串,它将被搜索用于匹配字符串开头的模式。 |
flags : 可以使用按位OR(|)指定不同的标志。 这些是修饰符,如下表所列。
re.match函数在成功时返回匹配对象,失败时返回None。使用match(num)或groups()函数匹配对象来获取匹配的表达式。
正则匹配法律条文编号 | 匹配对象 | 描述 |
1 | group(num = 0) | 此方法返回整个匹配(或特定子组num) |
2 | groups() | 此方法返回一个元组中的所有匹配子组(如果没有,则返回为None) |
示例
#!/usr/bin/python3import re
line = "Cats are smarter than dogs"matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)if matchObj: print ("up() : ",&up()) print ("up(1) : ",&up(1)) print ("up(2) : ",&up(2))else: print ("No match!!")1234567891011121314复制代码类型:[python]
当执行上述代码时,会产生以下结果 :
up() : Cats are smarter than dogs
up(1) : Cats
up(2) : smarter123复制代码类型:[python]
2.search函数
此函数尝试将RE模式与可选标志的字符串进行匹配。
下面是这个函数的语法 :
re.match(pattern, string, flags = 0)123复制代码类型:[python]
这里是参数的描述 :
pattern : 这是要匹配的正则表达式。
string : 这是字符串,它将被搜索用于匹配字符串开头的模式。 |
flags : 可以使用按位OR(|)指定不同的标志。 这些是修饰符,如下表所列。
re.search函数在成功时返回匹配对象,否则返回None。使用match对象的group(num)或groups()函数来获取匹配的表达式。
编号 | 匹配对象 | 描述 |
1 | group(num = 0) | 此方法返回整个匹配(或特定子组num) |
2 | groups() | 此方法返回一个元组中的所有匹配子组(如果没有,则返回为None) |
示例
#!/usr/bin/python3import re
line = "Cats are smarter than dogs";
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj: print ("up() : ",&up()) print ("up(1) : ",&up(1)) print ("up(2) : ",&up(2))else: print ("Nothing found!!")1234567891011121314复制代码类型:[python]
当执行上述代码时,会产生以下结果 :
up() : Cats are smarter than dogs
up(1) : Cats
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论