1 正则表达式介绍
正则表达式 :一组由字母和符号组成的特殊文本,可以帮助我们从某个复杂的字符串中,提取出满足我们要求的特殊文本。
实际开发过程中经常会有查找符合某些复杂规则的字符串的需要,比如:邮箱、图片地址、手机号码等,这时候想匹配或者查找符合某些规则的字符串就可以使用正则表达式了。
2 re模块介绍
本文通过python中正则进行举例测试。首先python中使用正则表达式需要导入模块re。
注:re.match() 根据正则表达式从头开始匹配字符串数据,如果如果开头没有匹配上,则会报错。下面案例都会使用match进行匹配,方便讲解。
2.1 re模块的介绍
在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个 re 模块。
# 导入re模块 import re # 使用match方法进行匹配操作 result = re.match(正则表达式,要匹配的字符串) # 如果上一步匹配到数据的话,可以使用group方法来提取数据 result.group()
2.2 re模块的使用
import re # 使用match方法进行匹配操作 result = re.match("csdn","csdn.net") # 获取匹配结果 info = result.group() print(info) # csdn
正则表达式之所以这么强大,是因为拥有很多专用的操作符(又称“元字符”)、特殊字符和修饰符。
为了更加方便记忆和学习正则表达式,我将这些分成了匹配单个字符、匹配多个字符、匹配开头结尾、匹配分组来分别讲解。
3 匹配单个字符
代码 | 功能 |
. | 匹配任意1个字符(除了换行符\n) |
[ ] | 匹配[ ]中列举的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字,即不是数字 |
\s | 匹配空白,即 空格,tab键 |
\S | 匹配非空白 |
\w | 匹配非特殊字符,即a-z、A-Z、0-9、_、汉字 |
\W | 匹配特殊字符,即非字母、非数字、非汉字 |
3.1 示例1: .
import re # . 匹配任意1个字符(除了\n) # 1. 正则表达式 # 2. 要匹配的字符串 # match_obj返回匹配对象 ret = re.match(".","M") print(ret.group()) ret = re.match("t.o","too") print(ret.group()) ret = re.match("t.o","two") print(ret.group()) match_obj = re.match("t.o", "t\no") if match_obj: # 获取匹配结果 result = match_obj.group() print(result) else: # 匹配失败match_obj是一个None print("匹配失败")
运行结果:
M too two 匹配失败
3.2 示例2:[]
import re # 1. 正则表达式 # 2. 要匹配的字符串 # match_obj返回匹配对象 # [ ] 匹配[ ]中列举的字符 # 如果hello的首字符小写,那么正则表达式需要小写的h ret = re.match("h","hello Python") print(ret.group()) # 如果hello的首字符大写,那么正则表达式需要大写的H ret = re.match("H","Hello Python") print(ret.group()) match_obj = re.match("葫芦娃[12]", "葫芦娃1") if match_obj: # 获取匹配结果 result = match_obj.group() print(result) else: # 匹配失败match_obj是一个None print("匹配失败") # 匹配银行卡密码中的其中一位 match_obj = re.match("[0123456789]", "7") if match_obj: # 获取匹配结果 result = match_obj.group() print(result) else: # 匹配失败match_obj是一个None print("匹配失败") match_obj = re.match("[0-9]", "7") if match_obj: # 获取匹配结果 result = match_obj.group() print(result) else: # 匹配失败match_obj是一个None print("匹配失败")
运行结果:
h H 葫芦娃1 7 7
3.3 示例3:\d
# \d = > [0-9]= >[0123456789] match_obj = re.match("\d", "7") if match_obj: # 获取匹配结果 result = match_obj.group() print(result) else: # 匹配失败match_obj是一个None print("匹配失败")
运行结果:
7
3.4 示例4:\D
# \D: 匹配一个非数字字符 match_obj = re.match("\D", "a") if match_obj: # 获取匹配结果 result = match_obj.group() print(result) else: # 匹配失败match_obj是一个None print("匹配失败")
运行结果:
a
3.5 示例5:\s
# \s: 匹配一个空白字符,空格或者tab键 match_obj = re.match("葫芦娃\s[12]", "葫芦娃 1") if match_obj: # 获取匹配结果 result = match_obj.group() print(result) else: # 匹配失败match_obj是一个None print("匹配失败")
运行结果:
葫芦娃 1
3.6 示例6:\S
match_obj = re.match("葫芦娃\S[12]", "葫芦娃+1") if match_obj: # 获取匹配结果 result = match_obj.group() print("没空白的匹配:", result) else: # 匹配失败match_obj是一个None print("没空白的匹配:匹配失败")
运行结果:
没空白的匹配: 葫芦娃+1
3.7 示例7:\w
# \w: 匹配一个字母、数字、下划线、汉字 match_obj = re.match("\w", "哈") if match_obj: # 获取匹配结果 result = match_obj.group() print(result) else: # 匹配失败match_obj是一个None print("匹配失败")
运行结果:
哈
3.8 示例8:\W
# 匹配特殊字符中的一位 match_obj = re.match("\W", "&") if match_obj: # 获取匹配结果 print(match_obj.group()) else: print("匹配失败")
运行结果:
&