• python之re模块(正则表达式)


    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

    re 模块使 Python 语言拥有全部的正则表达式功能。

    正则表达式中,普通字符匹配本身,非打印字符 、 等,还有些特殊字符

    特殊元字符

    . 默认情况下,他匹配除换行符之外的任何字符,当有标志re.S  被指定时可以匹配任何字符。

    ^ 从字符串开头匹配

    $ 匹配字符串的结尾或紧跟在字符串末尾的换行符之前

    * 匹配0次,1次或者多次前面的字符。

    匹配0次或者1次前面的字符。

    + 匹配1次或者多次前面的字符、

    {n} 前面的字符出现n次。

    {n,m} 前面的字符至少出现n次,至多出现m次

    | 模式选择符  如 A|B  AB可以是任意RE,创建一个匹配AB的正则表达式 。'|'操作从不贪婪,一旦A匹配,B将不会被进一步测试

    () 模式单元符

      用来逃避特殊字符(允许匹配像'*''?'等等字符 ),使用方法 *  ?

    [] 原子表,用来指定一组字符,[abk]表示匹配‘a’,‘b’或‘k’,[a-z] 匹配任意一个小写字母,[A-Z]匹配任意一个大写,[0-9]任意一个数字

        特殊字符在原子表失去特殊意义,如[.+?*()]匹配其中任意一个字符

        [^.?*({] 原子表内以^开头表示不匹配在表中的字符

    通用字符

    匹配热一个字母、数字或者下划线字符

    W 匹配除了字母、数字或者下划线的一个其他字符

    d 匹配一个10进制数

    D 匹配任何不是十进制数字的字符。

    s 匹配空白字符 相当于  fv]

    S 匹配任何不是空白字符的字符 相当于[^  fv]

     匹配字符串末尾

    .* 贪婪匹配模式 ,匹配尽可能多的

    .*?非贪婪匹配模式,只匹配的第一个满足的就行

    正则表达式常见函数

    re.compile(patternflags = 0) 对正则表达式进行预编译,用在多次需要调用的场合,相当于一个模板放在那里,想用就用。

    flags可以为以下几种

      re.A仅匹配ASCII码), re.I(匹配时忽略大小写),re.L(区域依赖), re.M(多行匹配),re.S让.匹配任意字符), re.U(Unicode匹配)和re.X(详细)表达

    prog = re.compile(pattern)
    result = prog.match(string)
    #另一种写法 result
    = re.match(pattern, string)

    re.match(patternstringflags = 0 从字符串开头处进行匹配  

    >>> m = re.match(r"(w+) (w+)", "Isaac Newton, physicist") #原始字符串符号(r"text")使正则表达式保持原始格式,无特殊用法
    >>> m.group(0)       # The entire match
    'Isaac Newton'
    >>> m.group(1)       # The first parenthesized subgroup.
    'Isaac'
    >>> m.group(2)       # The second parenthesized subgroup.
    'Newton'
    >>> m.group(1, 2)    # Multiple arguments give us a tuple.
    ('Isaac', 'Newton')
    >>> m = re.match(r"(?P<first_name>w+) (?P<last_name>w+)", "Malcolm Reynolds")
    >>> m.group('first_name') #正则表达式使用(?P<name>...)语法,则groupN 参数也可以是通过其组名称标识组的字符串
    'Malcolm'
    >>> m.group('last_name')
    'Reynolds'
    >>> m = re.match(r"(d+).(d+)", "24.1632")
    >>> m.groups() #返回一个包含匹配所有子组的元组
    ('24', '1632')

    re.search(patternstringflags = 0 字符串整体匹配返回第一个匹配成功的 ,match函数中的用法同样适用

    #match.startmatch.end
    >>> email = "tony@tiremove_thisger.net" >>> m = re.search("remove_this", email) >>> email[:m.start()] + email[m.end():] #返回按匹配的子串的开始和结束索引 'tony@tiger.net'

    re.findall(patternstringflags = 0 匹配符合模式的多个返回列表类型的结果  

    >>> text = "He was carefully disguised but captured quickly by police."
    >>> re.findall(r"w+ly", text)
    ['carefully', 'quickly']

    re.sub(pattern,rep,string , max 根据正则表达式来实现替换某些字符串,rep代表替换的内容,max,表示最多替换次数,不写就全部替换。

    >>> def dashrepl(matchobj):
    ...     if matchobj.group(0) == '-': return ' '
    ...     else: return '-'
    >>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')
    'pro--gram files'
    >>> re.sub(r'sANDs', ' & ', 'Baked Beans And Spam', flags=re.I)
    'Baked Beans & Spam'

    re.split(patternstringmaxsplit = 0flags = 0 根据模式拆分字符串

    >>> re.split(r'W+', 'Words, words, words.')
    ['Words', 'words', 'words', '']
    >>> re.split(r'(W+)', 'Words, words, words.')
    ['Words', ', ', 'words', ', ', 'words', '.', '']
    >>> re.split(r'W+', 'Words, words, words.', 1)
    ['Words', 'words, words.']
    >>> re.split('[a-f]+', '0a3B9', flags=re.I)
    ['0', '3', '9']

    具体的案例稍后补充.........

  • 相关阅读:
    使用字体图标完整步骤
    用position:absolute定位小窗口位于版面正中心
    MySql 技术内幕 (第7章 游标)
    MySql 技术内幕 (第5章 联接与集合操作)
    赋值语句作为判断的条件
    发布订阅模式和观察者模式
    关系代数
    数据库关系代数表达式学习
    软考通过分数
    哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
  • 原文地址:https://www.cnblogs.com/master-song/p/8886557.html
Copyright © 2020-2023  润新知