正则表达式
什么是正则表达式?
正则表达式(Regular Expression)是一种用来描述、匹配一系列字符串的方法。
简单来说,就是使用特殊的字符集合、表达式来匹配字符串。
比如,通常使用邮箱地址、电话号码等进行输入校验,就可以使用正则表达式进行匹配校验。
基本语法
匹配单个字符
.
表示匹配任意一个字符,比如:
import re
pattern = r'a.c'
print(re.findall(pattern, 'abc')) # ['abc']
print(re.findall(pattern, 'axc')) # ['axc']
print(re.findall(pattern, 'a1c')) # ['a1c']
[]
表示匹配一组字符,比如:
import re
pattern = r'[abc]'
print(re.findall(pattern, 'a1c')) # ['a', 'c']
匹配多个字符
*
表示匹配任意个字符(至少 0 个),比如:
import re
pattern = r'ab*c'
print(re.findall(pattern, 'ac')) # ['ac']
print(re.findall(pattern, 'abc')) # ['abc']
print(re.findall(pattern, 'abbbc')) # ['abbbc']
+
表示匹配一个或多个字符(至少 1 个)
import re
pattern = r'ab+c'
print(re.findall(pattern, 'ac')) # []
print(re.findall(pattern, 'abc')) # ['abc']
print(re.findall(pattern, 'abbbc')) # ['abbbc']
?
表示匹配零个或一个字符
import re
pattern = r'ab?c'
print(re.findall(pattern, 'ac')) # ['ac']
print(re.findall(pattern, 'abc')) # ['abc']
print(re.findall(pattern, 'abbc')) # []
匹配开头和结尾
^
表示匹配开头,比如:
import re
pattern = r'^a'
print(re.findall(pattern, 'abc')) # ['a']
print(re.findall(pattern, 'bbc')) # []
$
表示匹配结尾,比如:
import re
pattern = r'c$'
print(re.findall(pattern, 'abc')) # ['c']
print(re.findall(pattern, 'cba')) # []
高级语法
分组
使用括号来进行分组,比如:
import re
pattern = r'(a.c)\1'
print(re.findall(pattern, 'abcabc')) # ['abc']
这里使用 \1
表示引用第一个分组。
重复
{m}
表示重复 m 次,比如:
import re
pattern = r'ab{2}c'
print(re.findall(pattern, 'ac')) # []
print(re.findall(pattern, 'abc')) # []
print(re.findall(pattern, 'abbc')) # ['abbc']
print(re.findall(pattern, 'abbbbc')) # []
{m, n}
表示重复 m 到 n 次,比如:
import re
pattern = r'ab{2,3}c'
print(re.findall(pattern, 'ac')) # []
print(re.findall(pattern, 'abc')) # []
print(re.findall(pattern, 'abbc')) # ['abbc']
print(re.findall(pattern, 'abbbbc')) # []
{m,}
表示重复至少 m 次,比如:
import re
pattern = r'ab{2,}c'
print(re.findall(pattern, 'ac')) # []
print(re.findall(pattern, 'abc')) # []
print(re.findall(pattern, 'abbc')) # ['abbc']
print(re.findall(pattern, 'abbbbc')) # ['abbbbc']
特殊字符
\d
匹配数字,比如:
import re
pattern = r'\d+'
print(re.findall(pattern, 'abc123')) # ['123']
\w
匹配字母、数字、下划线,比如:
import re
pattern = r'\w+'
print(re.findall(pattern, 'abc_123')) # ['abc_123']
\s
匹配空白字符,比如:
import re
pattern = r'\s+'
print(re.findall(pattern, 'abc 123')) # [' ']
.
匹配除换行符 \n
之外的任意字符,比如:
import re
pattern = r'.+'
print(re.findall(pattern, 'abc\n123')) # ['abc', '123']
或
使用 |
来表示或,比如:
import re
pattern = r'good|bad'
print(re.findall(pattern, 'good morning')) # ['good']
print(re.findall(pattern, 'bad weather')) # ['bad']
结论
正则表达式是一种强大的匹配字符串的方法,虽然语法复杂,但是一旦掌握,就可以轻松实现各种字符串匹配的功能。在实际开发中,我们可以通过正则表达式来进行数据校验、数据提取等操作,提高开发效率。