摘要
{m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串\'aaaaaa\'中,a{2,4} 会匹配 4 个 a,但 a{2,4}? 只匹配 2 个 a。^表示行的开头,^\\d表示必须以数字开头。
$表示行的结束,\\d$表示必须以数字结束。
你可能注意到了,py也可以匹配\'python\'–>py;
但是加上^py$就变成了整行匹配,就只能匹配’py’了,匹配\'python\'时,就什么也得不到。

re.compile(pattern[, flags])
把正则表达式的模式和标识转化成正则表达式对象,供 match() 和 search() 这两个函数使用。
re 所定义的 flag 包括:
| 123456 | re.I 忽略大小写re.L 表示特殊字符集 \\w, \\W, \\b, \\B, \\s, \\S 依赖于当前环境re.M 多行模式re.S 即为’ . ’并且包括换行符在内的任意字符(’ . ’不包括换行符)re.U 表示特殊字符集 \\w, \\W, \\b, \\B, \\d, \\D, \\s, \\S 依赖于 Unicode 字符属性数据库re.X 为了增加可读性,忽略空格和’ # ’后面的注释 |
以下两种用法结果相同:
(A)
| 12 | compiled_pattern = re.compile(pattern) result = compiled_pattern.match(string) |
(B)
| 1 | result = re.match(pattern, string) |
| 123 | s = \’ABC\\\\-001\’ # Python的字符串 #对应的正则表达式字符串变成: #\’ABC\\-001\’ |
因此我们强烈建议使用Python的r前缀,就不用考虑转义的问题了
| 123 | s = r\’ABC\\-001\’ # Python的字符串# 对应的正则表达式字符串不变:# \’ABC\\-001\’ |
re.search(pattern, string[, flags])
在字符串中查找匹配正则表达式模式的位置,返回 MatchObject 的实例,如果没有找到匹配的位置,则返回 None。
对于已编译的正则表达式对象来说(re.RegexObject),有以下 search 的方法:
search (string[, pos[, endpos]])
若 regex 是已编译好的正则表达式对象,regex.search(string, 0, 50) 等同于 regex.search(string[:50], 0)。
| 123 | >>> pattern = re.compile(\”a\”) >>> pattern.search(\”abcde\”) # Match at index 0 >>> pattern.search(\”abcde\”, 1) # No match; |
re.match(pattern, string[, flags])
判断 pattern 是否在字符串开头位置匹配。对于 RegexObject,有:
match(string[, pos[, endpos]])
match() 函数只在字符串的开始位置尝试匹配正则表达式,也就是只报告从位置 0 开始的匹配情况,而 search() 函数是扫描整个字符串来查找匹配。如果想要搜索整个字符串来寻找匹配,应当用 search()。
| 12 | >>> pattern.match(\’bca\’,2).group()\’a\’ |
虽然,match默认是从开头匹配,但是,如果指定位置,仍然能成功;但是!match也是从指定位置开始匹配,不匹配仍然会失败,这一点就和search有区别啦。
match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None。
| 12345 | test = \’用户输入的字符串\’if re.match(r\’正则表达式\’, test): print(\’ok\’)else: print(\’failed\’) |
re.split(pattern, string[, maxsplit=0, flags=0])
此功能很常用,可以将将字符串匹配正则表达式的部分割开并返回一个列表。对 RegexObject,有函数:
split(string[, maxsplit=0])
对于一个找不到匹配的字符串而言,split 不会对其作出分割
ode>中,a{2,4} 会匹配 4 个 a,但 a{2,4}? 只匹配 2 个 a。
^表示行的开头,^\\d表示必须以数字开头。
$表示行的结束,\\d$表示必须以数字结束。
你可能注意到了,py也可以匹配\'python\'–>py;
但是加上^py$就变成了整行匹配,就只能匹配’py’了,匹配\'python\'时,就什么也得不到。

re.compile(pattern[, flags])
把正则表达式的模式和标识转化成正则表达式对象,供 match() 和 search() 这两个函数使用。
re 所定义的 flag 包括:
| 123456 | re.I 忽略大小写re.L 表示特殊字符集 \\w, \\W, \\b, \\B, \\s, \\S 依赖于当前环境re.M 多行模式re.S 即为’ . ’并且包括换行符在内的任意字符(’ . ’不包括换行符)re.U 表示特殊字符集 \\w, \\W, \\b, \\B, \\d, \\D, \\s, \\S 依赖于 Unicode 字符属性数据库re.X 为了增加可读性,忽略空格和’ # ’后面的注释 |
以下两种用法结果相同:
(A)
| 12 | compiled_pattern = re.compile(pattern) result = compiled_pattern.match(string) |
(B)
| 1 | result = re.match(pattern, string) |
| 123 | s = \’ABC\\\\-001\’ # Python的字符串 #对应的正则表达式字符串变成: #\’ABC\\-001\’ |
因此我们强烈建议使用Python的r前缀,就不用考虑转义的问题了
| 123 | s = r\’ABC\\-001\’ # Python的字符串# 对应的正则表达式字符串不变:# \’ABC\\-001\’ |
re.search(pattern, string[, flags])
在字符串中查找匹配正则表达式模式的位置,返回 MatchObject 的实例,如果没有找到匹配的位置,则返回 None。
对于已编译的正则表达式对象来说(re.RegexObject),有以下 search 的方法:
search (string[, pos[, endpos]])
若 regex 是已编译好的正则表达式对象,regex.search(string, 0, 50) 等同于 regex.search(string[:50], 0)。
| 123 | >>> pattern = re.compile(\”a\”) >>> pattern.search(\”abcde\”) # Match at index 0 >>> pattern.search(\”abcde\”, 1) # No match; |
re.match(pattern, string[, flags])
判断 pattern 是否在字符串开头位置匹配。对于 RegexObject,有:
match(string[, pos[, endpos]])
match() 函数只在字符串的开始位置尝试匹配正则表达式,也就是只报告从位置 0 开始的匹配情况,而 search() 函数是扫描整个字符串来查找匹配。如果想要搜索整个字符串来寻找匹配,应当用 search()。
| 12 | >>> pattern.match(\’bca\’,2).group()\’a\’ |
虽然,match默认是从开头匹配,但是,如果指定位置,仍然能成功;但是!match也是从指定位置开始匹配,不匹配仍然会失败,这一点就和search有区别啦。
match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None。
| 12345 | test = \’用户输入的字符串\’if re.match(r\’正则表达式\’, test): print(\’ok\’)else: print(\’failed\’) |
re.split(pattern, string[, maxsplit=0, flags=0])
此功能很常用,可以将将字符串匹配正则表达式的部分割开并返回一个列表。对 RegexObject,有函数:
split(string[, maxsplit=0])