美文网首页
正则表达式

正则表达式

作者: xiaozhoua | 来源:发表于2018-08-31 17:18 被阅读0次

    0 基本知识

    0.1 匹配(match)
    0.2 捕获(capture)
    0.3 替换(replace)
    • 获取特征对象
        pattern = re.compile("\\s+")
    • 匹配目标字符串
        match = pattern.match("hello world")

    1 贪婪模式和非贪婪模式

    1.1 概念解释

    在整个表达式匹配成功的前提下:
    贪婪模式:尽可能多的匹配(.*)--(来者不拒)
    非贪婪模式:尽可能少的匹配(.*?)--(见好就收)
    Python中数量词默认是贪婪模式

    1.2 代码示例

    import re
    s = "aaabc11123aaabc"
    # print(s)
    
    pattern_1 = re.compile('a.*?b')
    match_1 = pattern_1.findall(s)
    print(match_1)   # 结果为 ['aaab', 'aaab']
    
    pattern_2 = re.compile('a.*b')
    match_2 = pattern_2.findall(s)
    print(match_2)    # 结果为 ['aaabc11123aaab']
    
    

    (1)a.*?b,非贪婪模式
      代表从a开始,碰到第一个b即为结束,下一匹配又是以a开始,以b结束的特征字串。所以匹配到两个结果;
    (2)a.*b,贪婪模式
      代表从a开始,一直往下匹配,直到最后一个b结束

    2 不同括号,不同含义

    • []----字符集
    • {n}---数量,n次
    • ()----分组,一个括号对代表一组
      ([a-z0-9]{3}) ([A-Z]+),前一组为连续的三个小写字母或数字字符(可混),后一组为一个或多个连续的大写字母。注意,两组中间有个空格,说明这两组只能匹配两个字符串。

    3 匹配中文

    Unicode字符集中,中文大多数位于[\\u4e00-\\u9fa5],要匹配中文,注意将源字符串,(要查找的内容)为Unicode编码,如s = u"服了you"

    一些小东西

    1. compile(re.*)

    • pattern = re.compile('\[a-z]+',re.I)
      (大写的 i),表示忽略大小写

    • pattern = re.compile('\[a-z]+',re.S)
      表示将源字符串按一个整体进行匹配,而不是一次只匹配一行

    相关文章

      网友评论

          本文标题:正则表达式

          本文链接:https://www.haomeiwen.com/subject/kuaswftx.html