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>']
  • 相关阅读:
    java。equal()和== 的区别
    java。封装
    java。OOA,OOD,OOR
    java。类和对象
    java、数组;堆区,栈区
    java。 break和continue区别
    NYOJ 228 士兵杀敌(五)【差分标记裸题】
    2017CCPC 杭州 J. Master of GCD【差分标记/线段树/GCD】
    CF1025B Weakened Common Divisor【数论/GCD/思维】
    网络流算法笔记
  • 原文地址:https://www.cnblogs.com/huey/p/5070751.html
Copyright © 2011-2022 走看看