zoukankan      html  css  js  c++  java
  • 正则表达式

    元字符与转义

    正则表达式的元字符包括: ^ $ . [ ] { } - ? * + ( ) |

    元字符有着特殊的意义,当需要取消元字符的特殊含义时,需要在元字符之前加上反斜线字符

    ^$ 在正则表达式中被当作锚,其中 ^ 匹配字符串的起始位置,$ 匹配字符串的结束位置。

    任意字符

    . 匹配除 之外的任意字符。

    否定

    如果中括号内的第一个字符是 ^,表示匹配不在指定字符集内的字符。

    字符范围

    - 字符连接的两个字符表示范围,例如 [0-9] 等价于 [0123456789]。需要注意的是:- 左边字符的码值要小于右边字符的码值。

    或选项

    regex1 | regex2 表示匹配 regex1 或 regex2。

    实例

    a) 判断字符串 str 是否以数字开头

    >>> re.search(r"^[d][sS]*", str) != None;

    b) 判断字符串 str 是否以小写字母结尾

    >>> re.search(r"[sS]*[a-z]$", str) != None;

    c) 匹配由空格隔开的字符串

    >>> re.findall(r"[^ ]+", "long time no see");
    ['long', 'time', 'no', 'see']

    字符类简记法

    d 等价于 [0-9],其中的 d 表示数字(digital)
    D 等价于 [^d]

    w 等价于 [0-9a-zA-Z],其中的 w 表示单词字符(word)
    W 等价于 [^w]

    s 等价于 [ vf],其中的 s 表示空白字符(space)
    S 等价于 [^s]

    实例

    a) 匹配字符串中的数字

    >>> re.findall(r"[d]+", "abc123def456");
    ['123', '456']

    b) 使用 [sS] 或 [dD]、[wW] 匹配任意字符,包括

    >>> re.search("^[sS]+$", "!@#$%^&*()12345qwert") != None
    True

    POSIX 字符类

    POSIX 字符类 描述 ASCII 字符类 
     [:alnum:]  字母字符与数字字符  [0-9A-Za-z]
     [:blank:]  空格符与制表符   [ ]
     [:cntrl:]  控制字符  [x00-x1Fx7F]
     [:digit:]  数字字符  [0-9]
     [:graph:]  可见字符  [x21-x7E]
     [:lower:]  小写字母字符  [a-z]
     [:print:]  可打印字符,包括 [:graph:] 中所有字符再加上空格符  [x20-x7E]
     [:punct:]  标点符号字符  
     [:space:]  空白字符  [ vf]
     [:upper:]  大写字母字符  [A-Z]
     [:word:]  字母字符  [0-9A-Za-z_]
     [:xdigit:]  十六进制字符  [0-9A-Fa-f]

    需要注意的是,有些语言不支持 POSIX 字符类,比如 Python、JavaScript 。Java 中,POSIX 字符类 [[:name:]] 必须使用 p{Name} 的形式,比如 [:space:] 当写作 p{Space},注意第一字母要大写,除了 [:xdigit:] 要写作 p{XDigit}。

    量词

    量词 含义
    {n}  前面的元素恰好出现 n 次则匹配
    {m,n}  前面的元素出现的次数在 n~m 次之间时则匹配 
    {m,}  前面的元素出现次数超过 n 次则匹配
    {,n}  前面的元素出现次数不超过 m 次则匹配
    *  等价于 {0,}
    +  等价于 {1,}
    ?  等价于 {0,1}

    贪婪匹配与惰性匹配

    实例

    a) 贪婪匹配

    >>> re.findall(r"<span>[sS]*</span>", "<div><span>abc</span><br><span>xyz</span></div>");
    ['<span>abc</span><br><span>xyz</span>']

    a) 惰性匹配

    >>> re.findall(r"<span>[sS]*?</span>", "<div><span>abc</span><br><span>xyz</span></div>");
    ['<span>abc</span>', '<span>xyz</span>']
  • 相关阅读:
    【Python爬虫】:爬取干货集中营上的全部美女妹子(翻页处理)
    python进阶之py文件内置属性
    Delphi
    Goland debug 报错:could not launch process: decoding dwarf section info at offset 0x0: too short
    Goland 生成可执行文件
    代理加速配置详解
    关掉所有代码折叠folding
    前端工程化概述(转发)
    Reactjs —— 前端框架切换
    TODO——多线程
  • 原文地址:https://www.cnblogs.com/huey/p/5070751.html
Copyright © 2011-2022 走看看