Skip to content

正则表达式

API

python

  • 引入import re
  • 查找re.findall('正则模式','被查找的字符串',[flags=0(匹配模式)]),返回所有匹配的列表
  • image-20230327200439057

基本语法

  • 字符组:[asd..]匹配字符集内任何一个元素
  • [Pp]ython匹配Pythonpython
  • 区间匹配[0-9][0-9a-zA-Z]
  • 反向匹配[^0-9]匹配数字以外的字符
  • 匹配特殊字符\-添加反斜杠
  • 快捷方式:
  • 匹配边界\bmaster\b匹配master单词,\b\d\b匹配单个数字字符
  • 数字:\d
  • 大小写字母:\w
  • 空白字符(空格,\t\r\n\f\v)\s
  • 变为大写字母表取反(如\D表示非数字)
  • 匹配转义符\\需要用二倍的转义符\\\\
    • 在一些语言(Java)种使用可能需要再多一倍的\
    • 使用r原串进行简化:匹配模式串和原串一致即可,不需要用2倍转义符(还能解决不符合规范的问题)
  • ^python匹配开头;python$匹配结尾
  • 如python123python
  • 在正则前添加(?m)开启多行模式,此时^$匹配的是每一行的首尾
  • \b单词的边界\B非单词的边界
  • \G前一个匹配的结束
  • .可以匹配任何一个单独字符(\n除外)
  • 重复:
  • 重复数字:/d{6}匹配六个数字
  • 重复区间:/d{8,9}匹配8-9个数字
    • 添加问号/d{8,9}?表示尽可能匹配少的字符,比如可以匹配8个就不匹配9个
    • 贪婪匹配:使匹配长度尽可能短
    • 可以省却参数/d{3,}表示匹配3个以上的数字
    • +相当于{1,}
    • * 相当于{0,}
    • 常用.* .+
    • ?相当于{0,1}
  • 分组()
  • (\d{4})-(\d{7})匹配0731-8283333
  • 可以用于提取括号内的数据,如果使用了分组,那么查找时只返回括号内匹配的内容
    • 或者条件,从条件中选择提取(.jpg|.gif|.png)
  • 非捕获分组(?:)添加前缀,实现只分组匹配,不捕获
  • 回溯引用(\w+)(.*)(\1)要求第三个分组与第一个的内容一致
  • 先行断言:
  • 正向先行断言:(?=pattern)
    • re(?=gular)表示只匹配gular前面的re
  • 反向先行断言:(?!pattern)
    • re(?!g)只匹配后面不是g的re
    • 可以添加多个并列条件<(?!p)(?!/p).*?>
  • 补充:
    • (?!.*(.))不能出现连续相同字符
  • 后行断言:
  • 正向后行断言:(?<=pattern)
    • (?<=g)re表示只匹配g后面的re
  • 反向后行断言:(?<!pattern)
    • (?<!=g)re表示只匹配前面不是g的re

应用

  • 密码强度检测:
  • (?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d).{8}这段正则表达式规定了匹配的字符串中必须包含至少一个大写和小写的字母、数字,并且长度至少为8。