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

    正则表达式

    正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。

    下图提供了正则表达式的简介写法:

    1. 通配符 ?与 *

    • ? 通配符匹配文件名中的 0 个或 1 个字符;
      • 通配符匹配零个或多个字符。

    ps: 使用 * 字符代替 ? 字符扩大了找到的文件的数量。

    2. ^ ,+ ,$与.

    • ^为匹配输入字符串的开始位置。
      • 的作用是将前面一个字符或一个子表达式重复一遍或者多遍。, [0-9]+匹配多个数字, [0-9] 匹配单个数字
    • abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。
    • .字符在正则表达式代表着可以代表任何一个字符(包括它本身)

    例:[1]+abc$就是匹配数字开头,abc结尾的字符串

    var str = "123abc";
    var patt1 = /^[0-9]+abc$/;
    document.write(str.match(patt1));
    

    例:

    import re
    key = r"ababbbbcadsdf"
    p1 = r"ab+"
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    

    输出结果为:

    ['ab', 'abbbb']
    

    即:按顺序从左往右匹配,+是前面一个字符(b)匹配一次或者多次。

    3. 匹配.本身~转义字符:

    这个符号通常用来把特殊的符号转成普通的。

    例:

    import re
    key = r"afiouwehrfuichuxiuhong@hit.edu.cnaskdjhfiosueh"
    p1 = r"chuxiuhong@hit.edu.cn"
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    

    findall返回的是所有符合要求的元素列表,包括仅有一个元素时,它还是给你返回的列表。

    输出结果为:

    ['chuxiuhong@hit.edu.cn']
    

    我们在.的前面加上了转义符,而是只匹配“.”的意思!

    4. *跟在其他符号后面表达可以匹配到它0次或多次

    例如:网页内遇到了链接,可能既有http://开头的,又有https://开头的,我们怎么处理?

    import re
    key = r"http://www.nsfbuhwe.com and https://www.auhfisna.com"
    p1 = r"https*://"#看那个*!
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    
    

    输出结果为:

    ['http://', 'https://']
    
    

    5. []代表匹配里面的字符中的任意一个

    例如:

    import re
    key = r"lalala<heLLo>hello</HellO>heiheihei"
    p1 = r"<[Hh][Ee][Ll][Ll][Oo]>.+?</[Hh][Ee][Ll][Ll][Oo]>"
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    
    

    输出结果为:

    ['<heLLo>hello</HellO>']
    
    

    6. [^]代表除了内部包含的字符以外都能匹配

    例:现在有cat,hat,mat,qat,想要匹配所有的:
    则:

    import re
    key = r"mat cat hat qat"
    p1 = r"[a-z]*at"
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    
    

    输出结果为:

    ['mat', 'cat', 'hat', 'qat']
    

    若上例重要匹配除qat以外的,则:

    import re
    key = r"mat cat hat qat"
    p1 = r"[^q]at"#这代表除了p以外都匹配
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    
    

    输出结果为:

    ['mat', 'cat', 'hat']
    

    7. 贪婪模式

    例:我想匹配到@后面一直到“.”之间的,在这里是china 即@china.

    import re
    key = r"sichuan@china.edu.cn"
    p1 = r"@.+."
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    

    但是结果却是这样:

    ['@china.edu.']
    
    • 因为正则表达式默认是“贪婪”的,我们之前讲过,“+”代表是字符重复一次或多次。但是我们没有细说这个多次到底是多少次。所以它会尽可能“贪婪”地多给我们匹配字符,在这个例子里也就是匹配到最后一个“.”。
    • 那么,怎么才能匹配到想要的结果呢? “?”是也

    8. 只要在“+”后面加一个“?”就变成了懒惰模式,匹配尽可能少的。

    import re
    key = r"sichuan@china.edu.cn"
    p1 = r"@.+?."#我想匹配到@后面一直到“.”之间的,在这里是hit
    pattern1 = re.compile(p1)
    print pattern1.findall(key)
    

    此时输出结果为:

    ['@china.']
    
    

    小结

    先写到这里,后面在学习中遇到再补充进来。


    1. 0-9 ↩︎

  • 相关阅读:
    Linux 高性能server编程——高级I/O函数
    中国儿童移动游戏市场解读 潜力巨大有待开发
    HDU 2152 Fruit (母函数)
    Currying vs Partial Application
    我的最爱Lambda演算——开篇
    函数式编程-数据结构+算法
    高阶函数 、高阶类型
    高阶函数-哈哈
    备份-泛函编程(23)-泛函数据类型-Monad
    高阶函数
  • 原文地址:https://www.cnblogs.com/monkey-moon/p/9061108.html
Copyright © 2011-2022 走看看