A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

陈乐

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 陈乐 初级黑马   /  2018-10-31 16:47  /  1120 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

正则表达式与re模块
正则表达式regex用于高级的文本模式的匹配,抽取,以及文本的搜索与替换
一. 常用regex的特殊字符使用
  • |   择一匹配 ,相当于逻辑或                            bat|bet|bit

  • .    匹配任意单一字符,除了\n换行符 (.匹配点号)         chen....  , ..,.end           
  • ^  或  \A       匹配字符串开始位置            ^Start
  • $ 或 \Z       匹配字符串结尾位置            end$
  • \b      匹配单词的边界    \B 匹配在单词中间         \bthe  , \bthe\b,\Bthe
  • [    ]       匹配方括号里的任意一个字符       b[ajah]t      [sd][jkl][kjkjk]
  • [0-9]      数字    [a-zA-Z]  字母
  • [^aeiou]        不包括aeiou       [^\t\n]   不匹配制表符和换行符
  • *        匹配0次或多次前面的正则表达式     尽可能多
  • +        匹配一次或多次     尽可能多
  • ?         匹配0次或一次 尽可能多
  • *   +  ?     都是贪婪匹配,会尽可能多地匹配,* ?,+?,??是非贪婪匹配,会尽可能少地匹配
  • {N}      匹配N次
  • {M,N}    匹配M到N次    {M,N}?  非贪婪版
  • (      )        匹配封闭的正则表达式,然后另存为子组    ([0-9]{3})?
  • \d   相当于 [0-9]        \D     相当于 [^0-9]
  • \w     相当于  [A-Wa-z0-9]         \W   相当于 [^A-Wa-z0-9]
  • \s       匹配任何空格字符,相当于 [\n\t\r\v\f]      \S 与之相反
  • ​    \d{4}-\d{7}          电话号码 0737-2837928等
  • 拓展表示法
    1.(?...)  ?后的字符决定使用的模式,除了(?P<name>...),不建立分组
    2.(?aiLmsux)   用在正则表达式之前,向其传递参数,
             a 相当于re.A  只匹配ASCII码
             i 相当于re.I  忽略大小写
             L 相当于re.L  根据本地编码格式
             m 相当于re.M  多行模式
             s 相当于re.S  点号可以匹配所有,包括\n
             u 相当于re.U  Unicode matching
             x 相当于re.X   可以将pattern分解成多行,并添加注释
    3.(?:...)   匹配...,但不保留分组
    4.(?P<name>...)   将分组命名为name
    5.(?P=name)    调用之前的name分组
    6.(?#...)    注释,会被忽略
    7.(?=...)    'le(?=chen)' 只有后面是chen时才会匹配le
    8.(?!...)    'le(?!chen)' 只有后面不是chen时才匹配le
    9.(?<=...)    只有前面是...才匹配   
    10.(?<!...)    只有前面不是...才匹配  
        m = re.search(r'(?<=-)\w+','spam-egg')
        m.group(0)
        'egg'
    11.(?(id/name)yes-pattern|no-pattern)
            如果id/name分组存在则匹配yes-pattern,否则匹配no-pattern.

二.re函数
  • re.compile(pattern,flags=0)   
    将正则语句编译成regular expression object,以供其他函数调用

​             prog = re.compile(pattern)​              result = prog.match(string)
​              相当于
​               result = re.match(pattern, string)
  • re.search(pattern,string,flags=0)      
    搜索整个string,直到第一个pattern,返回相应的match object,如果没有,返回None
  • re.match(pattern,string,flags=0)      
    在string开头匹配pattern,返回match object,否则返回None. 即使是多行模式,也只匹配开头部分.
  • re.fullmatch(pattern,string,flags=0)     
    如果整个string能匹配pattern,返回match object,否则返回None
  • re.split(pattern,string,maxsplit=0,flags=0)      
    以pattern分解string为列表,maxsplit为n时,切分n次,如果pattern由括号包围时,pattern会保留在列表内,开头和结尾有pattern时,列表里会有空字符串''.
  • re.findall(pattern,string,flags=0)      
    返回string中所有能匹配pattern的matchs列表,相同的话,不会覆盖,当有一个以上分组时,返回元组列表,只匹配到一个的话,其他的为空字符串''
  • re.finditer(pattern,string,flags=0)      
    返回包含所有match的迭代器
  • re.sub(pattern,repl,string,count=0,flags=0)
    In [68]: re.sub('a|e','QQ','abcde')Out[68]: 'QQbcdQQ'
    搜索并替换,repl可以是字符串,也可以是函数,count表示替换次数
    $def dashrepl(matchobj):
    ​     if matchobj.group(0) == '-': return ' '
    ​     else: return '-'$ re.sub('-{1,2}', dashrepl, 'pro----gram-files')
    $'pro--gram files'
    $ re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam',flags=re.IGNORECASE)
    $'Baked Beans & Spam'
  • re.subn(pattern,repl,string,count=0,flags=0)
    操作与sub()相同,不过是返回一个元组(new_string,n_of_subs)
  • re.purge()
    清除缓存的正则表达式


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马