正则表达式

157 阅读3分钟

正则表达式

    1. 线上测试网址
http://tool.chinaz.com/regex/
    1. 正则表达式不属于python,是单独存在的,主要用于各编程语言数据的查找与筛选
    1. 如果需要编写一个校验用户手机号的输入是否合法我们应该怎样写呢?
    • 如果我们用纯python代码的话需要对号码进行n多判断,代码重复率极高,效率低下
    • 用正则表达式的话只需要几行就可实现
      import re
      phone_num = input('把你的手机号告诉我>>>:').strip()
      if re.match('^[13|15|17|18|19][0-9]{9}',phone_num):
          print(phone_num)
      else:
          print('输入不合法')
    
    1. 所以我们可以看到,使用正则表达式就很高效
    • 正则表达式本质上就是使用一些符号的组合产生一些特殊的含义,然后去字符串中筛选出符合条件的数据。
    1. 取消转义
    • 正则表达式取消\与字母的特殊含义需要在\前再加一次,出现一个斜杠就要加一次。
    • 但是python中我们可以使用r来取消
    正则:    \n   >>>    \\n
             \\n  >>>    \\\\n
    python:  \n   >>>    r'\n'
             \\n  >>>    r'\\n'
    

正则表达式之字符组

  • 字符组在没有量词修饰的情况下,一次只能针对一个数据值
[0-9]        匹配0-9之间的任意一个数字(包括09)
[A-Z]        匹配A-Z之间的任意一个大写字母(包括A和Z)
[a-z]        匹配a-z之间的任意一个小写字母(包括a-z)
[0-9a-zA-Z]  数字,大小写字母任意一个都可以

正则表达式特殊符号

    1. 特殊符号没有量词修饰的情况下,也是一个符号一次只能针对一个数据值
    1. 管道符|多数场景下都是或的意思
    1. ^与$组合能够限制要查找的具体数据
    1. ()可以用于起别名,分组获取对应数据
.           匹配除换行符以外的任意字符
\w          匹配字母数字下划线
\W          匹配非字母,非数字,非下滑线
\d          匹配数字
^           匹配字符串开头
$           匹配字符串的结尾
a|b         匹配字符a或字符b
()          不影响正则表达式的匹配下给其分组
[]          匹配字符串中的字符
[^]         匹配字符组中除了^后字符的所有字符

正则表达式之量词

    1. 所有量词都是默认贪婪匹配(越多越好)
    1. 量词不能单独使用,必须跟在表达式后
*           重复0次和n多次 (越多越好)
+           重复1次和n多次 (越多越好)
?          重复0次或1次   (默认为1次)
{n}         重复n次,
{n,}        重复n次或更多次
{n,m}       重复n到m次

贪婪匹配和非贪婪匹配

  <script>alert(123)</script>
  • 用贪婪匹配与非贪婪匹配匹配一段文本
    • 贪婪匹配
      <.*>
    
    输出结果:
    image.png
    • 非贪婪匹配
      <.*?>
    
    image.png

正则表达式实战

  • 常见的正则表达式直接百度查找就好,我们只要会完成基础修改和看懂别人的就行
编写校验用户手机号的正则
	0?(13|14|15|17|18|19)[0-9]{9}
编写校验用户身份证的正则
	\d{17}[\d|x]|\d{15}
编写校验用户邮箱的正则
	\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
编写校验用户qq号的正则
	[1-9]([0-9]{5,11})