Python 中的正则表达式

复习下以前学习的正则表达式

  • 匹配文本字面值ABC匹配ABC

    r = re.match('ABC', 'ABC')
    print(r) # <_sre.SRE_Match object; span=(0, 3), match='ABC'>
  • 使用择以匹配符 |
r = re.match('ABC|BCD', 'BCD')
print(r) # <_sre.SRE_Match object; span=(0, 3), match='BCD'>
  • .匹配任意字符(除了\n, flags 可以设置 DOTALL 来取消这个限制)

  • ^(或者\A, 有些国家的键盘不支持脱字符 ^) 以任意字符串开头的. ^cai 匹配任意以 cai 开头的字符串,

  • $(或者\Z) 以任意字符串结尾的, cai$ 匹配任意以 cai 结尾的字符串
  • \b\B则是用来匹配字符边界, \bcai 以 cai 开头的字符串, \bcai\B独立的 cai 字符串, \Bcai 不以 cai 开头的字符串
  • 字符集[], [aeiou]表示匹配 a e i o u 任一字符, c[abc]i 匹配 cai cbi cci
  • 范围限定[a-z], 匹配 a 到 z 的小写字母, 同理还有 [A-Z]、[0-9], 如果出现脱字符^则表示与非括号内的字符匹配, [^a-z] 不匹配 a 到 z 的小写字母, [“-a] 表示 ASCII 码中的 34-97, 具体参考 ASCII 表

贪婪符号

  • *匹配之前的表达式 0 次或者多次
  • +匹配之前的表达式 1 次或者多次
  • ?匹配之前的表达式 0 次或者 1 次
  • {}次数匹配, {5}匹配前面的表达式 5 次, {1, 5}匹配前面的表达式 1 到 5 次均可, [0-9]{15, 16} 匹配 15 或者 16 位数字(例如信用卡号码)
  • 可以在贪婪符号后面加上 ? 表示非贪婪模式
  • python3 中目前不支持侵占模式(Possessive)

    特殊字符

    • \d[0-9] 一致, 与 \D 相反
    • \w[A-Za-z0-9_]一致, 与\W 相反
    • \s与匹配任何空格字符, 与[\n\t\r\v\f] (\n 换行符, \t 水平制表符, \v 垂直制表符, \r 回车符, \f 换页符)
    • \b边界符, 匹配任何单词边界
    • \c匹配特殊字符, 如 \ . ,

    扩展表示法

    • (iLmsux) 分组中可以设置模式,iLmsux之中的每个字符代表一个模式,具体和上一章的模式相关
    • (?:...) 分组的不捕获模式,计算索引时会跳过这个分组
    • (?P<name>...) 分组的命名模式,取此分组中的内容时可以使用索引也可以使用name
    • (?P=name) 分组的引用模式,可在同一个正则表达式用引用前面命名过的正则
    • (?#...) 注释
    • (?<=Expression) 逆序肯定环视,表示所在位置左侧能够匹配Expression
    • (?<!Expression) 逆序否定环视,表示所在位置左侧不能匹配Expression
    • (?=Expression) 顺序肯定环视,表示所在位置右侧能够匹配Expression
    • (?!Expression) 顺序否定环视,表示所在位置右侧不能匹配Expression
    • (?(id/name)Y/N) 如果 id 或者 name 存在就匹配 Y, 如果不存在就匹配 N

猜你喜欢

转载自blog.csdn.net/u010435828/article/details/80207977