zoukankan      html  css  js  c++  java
  • 正则表达式学习(2)

    1.可选项

      比如:[colou?r],对color和colour,都可以匹配。这里,u?中的?表示紧邻着它的前一个字符是可选的

     这里再举一个例子,7月4日的英文的额文本,7月,可以是July 也可以是Jul。我们可以写成[July|jul],但是,更简洁的写法是:[July?]

    4日,可以是4,也可以是4th,也可以是fourth,所以,就是[fourth|4th|4],进一步简洁为[fourth|4(th)?],注意,这里的?就是作用于()里面的了

    2.重复出现

    [+]和[*]的作用和?类似。[+]表示紧邻的元素出现一次或者多次,而[*]表示之前紧邻的元素出现任意多次,或者不出现。

    [+]和[*]和[?]这三个统称为量词,因为他们限定了匹配的次数。

    我们来分析这段代码:

    import re
    mystr='<hr +size *= *[0-9]+ *>'
    print(re.findall(mystr,'<hr      size   =14   >'))

    这里分布分析:

    1)hr和size之间,是有一个空格的,根据+表示,至少要有一个空格,多个也可以,因为在html语言中,hr和size必须要有空格。

    2)=的左右两侧,可以有空格,也可以没有,也就是0到多个空格,这个时候,就是用*,而不能用=

    3)[0-9]+表示有1个或者多个0到9之间的数字,最后一个*,很容易理解。

    更进一步,在html中,实际上size这个也是可选的,比如<hr/>那就是使用缺省的size

    import re
    mystr='<hr( +size *= *[0-9]+)? *>'
    print(re.match(mystr,'<hr   size  =    14   >').group(0))
    print(re.match(mystr,'<hr>').group(0))

    注意,这个时候,用findall是不对的,因为:

    findall函数返回的总是正则表达式在字符串中所有匹配结果的列表,此处主要讨论列表中“结果”的展现方式,即findall中返回列表中每个元素包含的信息。

    @1.当给出的正则表达式中带有多个括号时,列表的元素为多个字符串组成的tuple,tuple中字符串个数与括号对数相同,字符串内容与每个括号内的正则表达式相对应,并且排放顺序是按括号出现的顺序。

    @2.当给出的正则表达式中带有一个括号时,列表的元素为字符串,此字符串的内容与括号中的正则表达式相对应(不是整个正则表达式的匹配内容)。

    @3.当给出的正则表达式中不带括号时,列表的元素为字符串,此字符串为整个正则表达式匹配的内容。

    而这里用match,也是起始位置开始匹配,如果匹配不到,就返回NONE,如果是如下代码,就出错了。

    import re
    mystr='王辰风    <hr( +size *= *[0-9]+)? *>'
    print(re.match(mystr,'<hr   size  =    14   >').group(0))
    print(re.match(mystr,'<hr>').group(0))

    或者给成这样:

    import re
    mystr='(<hr( +size *= *[0-9]+)? *>)'
    print(re.findall(mystr,'wcf <hr> <hr   size  =    14   >'))
  • 相关阅读:
    APUE学习笔记:第四章 文件和目录
    APUE学习笔记:第三章 文件I/O
    APUE学习笔记:第二章 UNIX标准化及实现
    APUE学习笔记:第一章 UNUX基础知识
    《数据库系统概念》学习笔记2
    go语言下载地址
    Centos7 编译 android4.4
    剑侠情缘新进展
    ubuntu server 14.04手动安装svn
    ubuntu server 14.04 lts显示乱码的问题
  • 原文地址:https://www.cnblogs.com/aomi/p/7061194.html
Copyright © 2011-2022 走看看