正则表达式完全匹配
正则表达式是一种用于操作字符串的强大工具。正则表达式可以用来验证、匹配、替换、提取等一系列操作。本文将重点介绍正则表达式的完全匹配。
正则表达式的完全匹配指的是精确匹配一个字符串,即一个字符串必须完全符合正则表达式的规则才能被认为是匹配的。在正则表达式中,用 ^ 表示字符串的开头,用 $ 表示字符串的结尾。
例如,以下正则表达式只会匹配一个由数字组成的字符串:
import re
pattern = "^\d+$"
result1 = re.match(pattern, "12345") # 匹配成功
result2 = re.match(pattern, "12a45") # 匹配失败
print(result1)
print(result2)
输出结果:
<re.Match object; span=(0, 5), match='12345'>
None
上述代码中,使用了 Python 的 re 模块来进行正则表达式的匹配。re.match() 方法用于尝试从字符串的开头匹配正则表达式,如果匹配成功,则返回一个 Match 对象,如果匹配失败,则返回 None。span=(0,5) 表示匹配的字符串的起始位置和结束位置。
除了前面提到的 ^ 和 $,正则表达式还有其他的元字符和转义字符,以下是一些常用的元字符和转义字符:
- . :匹配任意字符,除了换行符 \n
- \d:匹配任意数字字符,等同于 [0-9]
- \D:匹配任意非数字字符,等同于 [^0-9]
- \w:匹配任意字母数字字符,等同于 [a-zA-Z0-9_]
- \W:匹配任意非字母数字字符,等同于 [^a-zA-Z0-9_]
- \s:匹配任意空白字符,包括空格、制表符、换页符等等
- \S:匹配任意非空白字符
- \b:匹配单词边界,即单词与空格之间的位置
- \B:匹配非单词边界
例如,以下正则表达式可以匹配一个由字母开头、由字母数字组成、长度为 6-12 的字符串:
import re
pattern = "^[a-zA-Z]\w{5,11}$"
result1 = re.match(pattern, "abc123") # 匹配成功
result2 = re.match(pattern, "abc123abc123") # 匹配失败
print(result1)
print(result2)
输出结果:
<re.Match object; span=(0, 6), match='abc123'>
None
在上面的正则表达式中,使用了字符集 [a-zA-Z] 来匹配任意一个字母,\w{5,11} 表示匹配任意一个字母数字,长度为 5-11 的字符串。因此上述正则表达式匹配成功的字符串只能是 abc123。
有时候,我们需要匹配一个由多个子模式组成的字符串,这时可以使用正则表达式的分组特性。在正则表达式中,用 () 来表示一个分组,可以对分组进行一些额外的操作,例如限定分组出现的次数、获取分组匹配的内容等等。
例如,以下正则表达式可以匹配一个由多个由空格隔开的数字组成的字符串,并且限定了这些数字的取值范围:
import re
pattern = "^(\d{1,3}\s){2}\d{1,3}$"
result1 = re.match(pattern, "123 456 789") # 匹配成功
result2 = re.match(pattern, "1 55 22 7") # 匹配失败
print(result1)
print(result2)
输出结果:
<re.Match object; span=(0, 11), match='123 456 789'>
None
在上述正则表达式中,用 (\d{1,3}\s) 表示一个由 1-3 个数字和一个空格组成的分组,{2} 表示这个分组重复出现 2 次,\d{1,3} 表示匹配一个由 1-3 个数字组成的字符串。因此上述正则表达式匹配成功的字符串只能是一个由 3 个由空格隔开的 1-3 位数字组成的字符串。
结论
正则表达式的完全匹配是一种非常常见和实用的字符串匹配技巧。在实际工作中,我们可以运用正则表达式工具来处理各种字符串操作,例如过滤、验证、替换、提取等等。本文重点介绍了正则表达式的完全匹配,以及常用的元字符、转义字符和分组特性。在实际应用中,我们需要结合实际情况,选择合适的正则表达式进行操作。