美文网首页office数据分析Python
【使用Python处理文本2】

【使用Python处理文本2】

作者: 西布鲁克 | 来源:发表于2021-06-09 21:25 被阅读0次

    正则表达式

    正则表达式是一个强大的文本处理工具,在Linux系统中使用广泛,Linux系统中大部分文本处理工具都支持正则表达式,如grep、sed和awk

    基本语法

    • ?[a-zA-Z]+ : 匹配给定文本中的所有单词
      ?用于匹配单词前后可能出现的空格;[a-zA-Z]+代表一个或多个英文字母
    • [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} : 匹配一个IP地址
      [0-9]表示数字;{1,3}表示1到3位数的数字组合;.在正则表达式中有特殊含义,所以需要用反斜杠进行转义

    利用re库处理正则表达式

    在Python中,标准库的re模块用来处理正则表达式,它能够顺利处理Unicode和普通字符串。这个模块包含了与正则表达式相关的函数、标志和一个异常。

    最常用的是re模块下的findall函数,用来输出所有符合模式匹配的子串

    import re
    
    data="What is the difference between python 2.7.13 and python 3.6.0?"
    re.findall('python [0-9]\.[0-9]\.[0-9]',data)
    

    如果定义了错误的正则表达式,re模块会抛出一个异常

    python中有两种使用正则表达式的方法

    • 直接使用re模块中的函数
      前面的例子就是直接使用re模块的函数
    • 创建一个特定模式编译的正则表达式对象
      如下代码所示:
    import re
    
    data="What is the difference between python 2.7.13 and python 3.6.0?"
    re_obj=re.compile('python [0-9]\.[0-9]\.[0-9]',flags=re.IGNORECASE)
    re_obj.findall(data)
    

    编译版本的代码相对而言具有更好的程序执行性能

    常用的re方法

    匹配类方法

    • findall() : 查找子串,成功返回匹配子串的列表(没有找到返回空列表)
    • match() : 类似字符串的startswith()方法,但是可以用正则表达式做模糊匹配,更加强大。匹配成功返回一个SRE_Match对象
    • search() : 与match()方法极为类似,只是search()可以在字符串的任意位置进行匹配
    • finditer() : 返回一个迭代器

    修改类方法

    • sub() : 类似字符串的replace()方法,但是支持正则表达式
    • split() : 将字符串拆分成子串,支持正则表达式

    大小写不敏感

    re.findall('python [0-9]\.[0-9]\.[0-9]',data,flags=re.IGNORECASE)
    

    非贪婪匹配

    比如要匹配以'Beautiful'开头并且以点号结尾的字符串,默认情况下正则表达式使用贪婪匹配,就是如果有多个字符串都符合这一规则,尽可能匹配长的字符串,如果要使用非贪婪匹配,需要在匹配字符串时加上一个"?"

    text="Beautiful is better than ugly. Explicit is better than implicit."
    re.findall('Beautiful.*\.',text) #贪婪匹配
    re.findall('Beautiful.*?\.',text) #非贪婪匹配

    相关文章

      网友评论

        本文标题:【使用Python处理文本2】

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