跳转至

re

545 个字 预计阅读时间 5 分钟

https://docs.python.org/3/library/re.html

python re 模块是正则表达式 (Regular Expression) 的标准库,通过 import re 导入

常用函数有:

  • re.search() :在整个字符串中找到第一个匹配
  • re.match(): 只从字符串开头开始匹配
  • re.fullmatch():要求整个字符串完全匹配
  • re.findall(): 找出所有匹配并返回列表
  • re.compile():编译出一个 re 对象以复用
  • re.sub():匹配模式并替换为指定的字符串

常见正则语法:

  • 基本字符:表示自己本身,例如 r"abc"

  • 元字符:

    • .:匹配任意单个字符(默认不匹配换行,加上 DOTALL flag 后可以匹配包括换行符在内的所有字符

    • \d:匹配数字,等价于 [0-9]

    • \D:匹配非数字

    • \w :匹配字母、数字、下划线,等价于 [A-Za-z0-9_]

    • \W:匹配非“单词字符”

    • \s:匹配空白字符,包括空格、tab、换行符

    • \S:匹配非空白字符

  • 字符集:

    • [abc]:匹配中括号中 a、b、c 任一字符
    • [^abc]^ 放在中括号里表示非
  • 重复次数:

    • *:前一个模式出现 0 次或多次
    • +:前一个模式出现 1 次或多次
    • ?:前一个模式出现 0 次或一次 ( *?表示非贪婪匹配 )
    • {n}:前一个模式恰好出现 n
    • {n,}:前一个模式出现至少 n
    • {n,m}:前一个模式出现 n m

Tip

在字符集 [] 外面,要匹配这些特殊符号例如 +? 需要加 \ 进行转义,但是在字符集内部,这些字符就失去了作为重复次数的特殊含义,就不需要转义了

  • 其他符号:
    • ^:匹配字符串开头
    • $:匹配字符串结尾
    • |:或运算:例如 r"cat|dog"
    • ():分组
    • re 通常返回的是 match 对象,可以通过 match.group(0) 返回匹配到的完整文本,group(1)、group(2) ... 依次返回第一个、第二个 ... 个分组结果

常见 flags

  • re.Ire.IGNORECASE:忽略大小写
  • re.Sre.DOTALL:让 . 也能匹配换行

断言:

  • (?=...):要求当前位置后面是某个模式
  • (?!...):要求当前位置后面不是某个模式
  • (?<=...):要求当前位置前面是某个模式
  • (?<!...):要求当前位置前面不是某个模式