• 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']

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

  • 相关阅读:
    Android开发 ViewConfiguration View的配置信息类
    Android 开发 倒计时功能 转载
    Android 开发 关于7.0 FileUriExposedException异常 详解
    Android 开发 实现文本搜索功能
    Android 开发 Activity里获取View的宽度和高度 转载
    Android 开发 存储目录的详解
    Android 开发 Fresco框架点击小图显示全屏大图实现 ZoomableDraweeView
    Android 开发 将window变暗
    Android 开发 DisplayMetrics获取Android设备的屏幕高宽与其他信息
    Android 开发 DP、PX、SP转换详解
  • 原文地址:https://www.cnblogs.com/master-song/p/8886557.html
Copyright © 2020-2023  润新知