• js 正则表达式与 python正则表达式


    修饰符

    1.js

    i g m

    i 忽视大小写
    g 执行全局匹配(查找所有匹配,而非找到第一个匹配后停止)
    m 执行多行匹配
    gi 全局匹配+忽略大小写

    2.python

    re.I
    re.IGNORECASE

    让正则表达式忽略大小写,这样一来,[A-Z]也可以匹配小写字母了。此特性和locale无关。

    re.L
    re.LOCALE
    让\w、\W、\b、\B、\s和\S依赖当前的locale。

    re.M
    re.MULTILINE
    影响'^'和'$'的行为,指定了以后,'^'会增加匹配每行的开始(也就是换行符后的位置);'$'会增加匹配每行的结束(也就是换行符前的位置)。

    re.S
    re.DOTALL
    影响'.'的行为,平时'.'匹配除换行符以外的所有字符,指定了本标志以后,也可以匹配换行符。

    re.U
    re.UNICODE
    让\w、\W、\b、\B、\d、\D、\s和\S依赖Unicode库。

    re.X
    re.VERBOSE
    运用这个标志,你可以写出可读性更好的正则表达式:除了在方括号内的和被反斜杠转义的以外的所有空白字符,都将被忽略,而且每行中,一个正常的井号后的所有字符也被忽略,这样就可以方便地在正则表达式内部写注释了。也就是说,下面两个正则表达式是等效的:

    a = re.compile(r"""\d +  # the integral part
                       \.    # the decimal point
                       \d *  # some fractional digits""", re.X)
    b = re.compile(r"\d+\.\d*")
    re.search(pattern, string[, flags])

    named groups

    和普通的圆括号类似,但是子串匹配到的内容将可以用命名的name参数来提取。组的name必须是有效的python标识符,而且在本表达式内不重名。命名了的组和普通组一样,也用数字来提取,也就是说名字只是个额外的属性。

    1.js:

    (?<group_name>规则)       ====>      match.groups.group_name

    let re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u;
    let result = re.exec('2015-01-02');
    // result.groups.year === '2015';
    // result.groups.month === '01';
    // result.groups.day === '02';

    2.python:

    (?P<group_name>规则)      =====>       match.group["group_name"]

    >>> m=re.match('(?P<var>[a-zA-Z_]\w*)', 'abc=123')
    >>> m.group('var')
    'abc'
    >>> m.group(1)
    'abc'
    (?P=name)

    js行结束符号为$, python为\Z

    元字符
    . 查找单个字符,除了换行和行结束符 . === [^\r\n]
    \w 查找单词字符 \w === [0-9A-z_]
    \W 查找非单词字符 \W === [^\w]
    \d 查找数字字符 \d === [0-9]
    \D 查找非数字字符 \D === [^\d]
    \s 查找空白字符(空格符,制表符\t,回车符\r,换行符\n,垂直换行符\v,换页符\f) \s === [\n\f\t]
    \S 查找非空白字符 \S === [^\s]
    \b 匹配单词边界
    \B 匹配非单词边界
    \0 查找null字符
    \n 换行符
    \f 换页符
    \r 行结束符
    \t 缩进符 Tab
    \v 垂直换行符
    \xxx 查找以八进制数 xxx规定的字符
    \xdd
    \uxxxx

    匹配一切字符
    /[\u0000-\uffff]/g
    /[\s\S]/
    /[\d\D]/

    括号

    [] 中括号,字符集合

    {} 花括号,量词符,规定前面规则匹配的次数上下限

    () 小括号,表示优先级

    Python中

    (?#...)
    注释,圆括号里的内容会被忽略。

    (?=...)
    如果 ... 匹配接下来的字符,才算匹配,但是并不会消耗任何被匹配的字符。例如 Isaac (?=Asimov) 只会匹配后面跟着 'Asimov' 的 'Isaac ',这个叫做“前瞻断言”。

    (?!...)
    和上面的相反,只匹配接下来的字符串不匹配 ... 的串,这叫做“反前瞻断言”。

    (?<=...)
    只有当当前位置之前的字符串匹配 ... ,整个匹配才有效,这叫“后顾断言”。字符串'abcdef'可以匹配正则(?<=abc)def,因为会后向查找3个字符,看是否为abc。所以内置的子RE,需要是固定长度的,比如可以是abc、a|b,但不能是a*、a{3,4}。注意这种RE永远不会匹配到字符串的开头。举个例子,找到连字符('-')后的单词:

    (?<!...)
    同理,这个叫做“反后顾断言”,子RE需要固定长度的,含义是前面的字符串不匹配 ... 整个才算匹配。

    (?(id/name)yes-pattern|no-pattern)
    如有由id或者name指定的组存在的话,将会匹配yes-pattern,否则将会匹配no-pattern,通常情况下no-pattern也可以省略。例如:(<)?(\w+@\w+(?:\.\w+)+)(?(1)>)可以匹配 '<user@host.com>' 和 'user@host.com',但是不会匹配 '<user@host.com'。

    下面列出以'\'开头的特殊序列。如果某个字符没有在下面列出,那么RE的结果会只匹配那个字母本身,比如,\$只匹配字面意义上的'$'。

    \number
    匹配number所指的组相同的字符串。组的序号从1开始。例如:(.+) \1可以匹配'the the'和'55 55',但不匹配'the end'。这种序列在一个正则表达式里最多可以有99个,如果number以0开头,或是有3位以上的数字,就会被当做八进制表示的字符了。同时,这个也不能用于方括号内。

    \A
    只匹配字符串的开始。

    \b
    匹配单词边界(包括开始和结束),这里的“单词”,是指连续的字母、数字和下划线组成的字符串。注意,\b的定义是\w和\W的交界,所以精确的定义有赖于UNICODE和LOCALE这两个标志位。

    \B
    和\b相反,\B匹配非单词边界。也依赖于UNICODE和LOCALE这两个标志位。

    \d
    未指定UNICODE标志时,匹配数字,等效于:[0-9]。指定了UNICODE标志时,还会匹配其他Unicode库里描述为字符串的符号。

    \D
    和\d相反,不多说了。

    \s
    当未指定UNICODE和LOCALE这两个标志位时,匹配任何空白字符,等效于[ \t\n\r\f\v]。如果指定了LOCALE,则还要加LOCALE相关的空白字符;如果指定了UNICODE,还要加上UNICODE空白字符,如较常见的空宽度连接空格(\uFEFF)、零宽度非连接空格(\u200B)等。

    \S
    和\s相反,也不多说。

    \w
    当未指定UNICODE和LOCALE这两个标志位时,等效于[a-zA-Z0-9_]。当指定了LOCALE时,为[0-9_]加上当前LOCAL指定的字母。当指定了UNICODE时,为[0-9_]加上UNICODE库里的所有字母。

    \W
    和\w相反,不多说。

    \Z
    只匹配字符串的结尾。

    https://www.jb51.net/article/50511.htm

  • 相关阅读:
    AngularJs练习Demo3
    AngularJs练习Demo2
    AngularJs练习Demo1
    上传图片预览,支持IE6
    上传图片预览插件(转)
    微信公众平台SDK
    C# 4.0 并行计算部分
    在没有安装有mvc3的主机上部署asp.net mvc3网站,需要包含的DLL文件
    全排列
    不重复排列
  • 原文地址:https://www.cnblogs.com/yueyiviolet/p/16258014.html
Copyright © 2020-2023  润新知