2018-08-30
正则表达式
正则表达式简介:
它是一种由-符号-组成的,用来检索字符串的、特殊表达式!!
需要正则表达式引擎进行解释、分析。目前,正则表达式的引擎主要分为三种:DFA, NFA, POSIX, NFA。正则表达式的语法结构
通过python程序进行测试,但是正则表达式的语法结构在各种语言环境中都是通用的。
Python中提供了re模块,包含了正则表达式的所有功能,专门用于进行正则表达式的处理。
对比:常规的验证手机号码操作:
phone = input("请输入手机号:")
# 验证用户手机号码是否合法的函数
def validatePhone(phone):
# 判断长度是否合法:
if len(phone) == 11:
#判断开始的三位数字是否合法:
if phone.startswith("156") or phone.startswith("187"):
# 遍历号码,是否都是数字
for n in phone:
# isdigit() 判断是否都是数字
if not n.isdigit():
msg = "手机号码中有非法字符"
return msg
else :
print("手机号码合法")
else:
print("开头数字不合法")
else:
print("长度不合法")
print(validatePhone(phone))
测试执行结果如下:
请输入手机号:1563825238怕
手机号码中有非法字符
请输入手机号:18713640027
手机号码合法
None
当我们用正则表达式来改造这段程序时,代码量将大大缩短!!
先上代码:
import re
phone = input("请输入手机号:")
# 验证用户手机号码是否合法的函数
def validatephone(phone):
# 定义正则表达式
regexp = r"(156|187)\d{8}$"
# 开始验证
if re.match(regexp, phone):
return "手机号码合法"
else:
return "手机号码不合法,请检查号码!!"
# 调用函数执行
print(validatephone(phone))
测试执行结果:
请输入手机号:1875889664
手机号码不合法,请检查号码!!
请输入手机号:18712345678
手机号码合法
2.1 正则表达式中的元字符
在使用正则表达式的过程中,一些包含特殊含义的字符,用于表示字符位置,非常重要!!
元字符 | 作用 |
---|---|
^ | 匹配字符串的开头位置的字符 |
$ | 匹配字符串的结束位置的字符 |
. | 匹配任意一个字符 |
\d | 匹配一个数字字符 |
\D | 匹配一个非数字字符 |
\s | 匹配一个空白字符 |
\S | 匹配一个非空白字符 |
\w | 匹配一个数字/字母/下划线任意一个字符 |
\W | 匹配一个非数字、字母、下划线组成的任意一个字符 |
\b | 匹配一个单词的边界 |
\B | 匹配不是单词的开头或者结束位置 |
2.2 正则表达式的量词
量词 | 作用 |
---|---|
x* | 匹配 * 号前面的字符出现0次或者多次 |
x+ | 匹配 + 号前面的字符出现1次或多次 |
x? | 匹配 ? 号前面的字符出现0次或者1次 |
x{n} | 匹配 x 前面的字符出现n次 |
x{m, n} | 匹配 x 前面的字符出现至少m次,最多n次 |
x{n, } | 匹配 x 前面字符出现至少n次 |