细说Python操作之正则表达式

系列文章目录

第一章:Python 操作之正则表达式


文章目录

  • 系列文章目录
  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
  • 1.引入库
  • 2.读入数据
  • 总结

  • 前言

    正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于匹配字符串中字符组合的模式描述工具。它广泛用于文本搜索、数据验证、字符串替换等领域。正则表达式通过特定的语法规则,定义了搜索模式,可以高效地查找、替换或验证字符串是否符合特定的格式。

    以下是我列举的正则表达式的基本元素和用法示例:


    一、元字符:

    元在中文之中有一个解释是“根本”。万丈高楼平地起,其实在我认知中学会元字符的应用,就如用砖瓦,已经可以盖起来一座相当高的楼层了,毕竟元字符是正则表达式的基础,语法都是由元字符的运用演化而来,所以理解元字符的用法是重中之重。下面是我列举的一些常规元字符的用法:

    1.1通配符.与字符集[]:

    顾名思义,通配符是可以理解为能够广泛对字符进行匹配,包括但不限于字符串、数字、汉字、特殊符号等

    而字符集就可以看做是一个你输入的匹配限定条件的集合,只有满足字符集之中的内容才会进行匹配

    代码 说明
    . 匹配除换行符以外的任意字符
    [   ] 匹配字母或数字或下划线或汉字

    1.1.1通配符. 可以匹配到除了\n意外的其他字符,一个符号占据的是一个字符的位置

    以字符串为例:s= "apple ape agree age amaze animate advertise a\ne"

    我们可以看到字符串s之中是存在\n这个换行符的

    我们要查找三个字母,有a开头e结尾的字符串那么得到的结果是:

    s= "apple ape agree age amaze animate advertise a\ne"
    ret = re.findall('a.e',s)

    如果我们再要查找四个字母,有a开头e结尾的字符串,则需要再加一个.符号,例如:

    s= "apple ape agree age amaze animate advertise a\ne"
    ret = re.findall('a..e',s)

    1.1.2字符集[]匹配字母或数字或下划线或汉字,一个[]识别匹配的是[]中的一个符号

    以字符串为例:s= "apple ape agree age amaze animate advertise alne a&e a2e a6e a9e"

    我们需要的是以a开头,以e结尾的三个由字母组成的字符串,那么.就不适用了,因为通配符会匹配任意除换行符以外的字符,那么这里就需要使用字符集来进行字符的定向选择

    s= "apple ape agree age amaze animate advertise alne a&e a2e a6e a9e"
    ret = re.findall('a[a-z]e',s)

    [a-z]中a-z其实指的是英文字母a一直到z,是一个范围条件

    如果我们再要查找四个字母,有a开头e结尾的字符串,则需要再加一个[]符号,例如:

    s= "apple ape agree age amaze animate advertise alne a&e a2e a6e a9e"
    ret = re.findall('a[a-z][a-z]e',s)

    而[]也可以限制选择的字符是数字还是特殊符号,例如:

    ret = re.findall('a[0-9]e',s)

            ·

    ret = re.findall('a[&|6]e',s)

    注:|是或运算符

    其中还有一个需要注意的字符,那就是取反字符^,这个放在字符串前面表示就是匹配字符串开始的位置(下文会说明),而放在字符集里面表示取反[^0-9]即不取0到9的数字,那么就是非数字字符与\D等效;[^a-zA-Z0-9_]表示不取数字、字母和下划线,等价于\W(\D与\W转义字符会给予说明)

    s= "apple ape agree age amaze animate advertise alne a&e a2e a6e a9e"
    ret = re.findall('a[^0-9]e',s)

    1.2重复元字符:

    顾名思义,重复元字符就是用来匹配一个或多个重复的字符或子表达式

    代码/语法 说明
    * 重复零次或更多次
    + 重复一次或更多次
    ? 重复零次或一次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次

    1.2.2{}的用法:

    思想就是{}中,通过添加数字,来决定匹配重复字符的次数,形式是  需要匹配的内容{n,m}

    以字符串为例:s= "aecee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"

    如果我们需要找到以a开头以e结尾的五个字符,那么根据上文通配符可以写成 re.findall('a…e',s)

    但是我们可能会遇到百八十个的情况,就不能只靠.,那么就需要使用{}:

    s= "aecee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
    ret = re.findall('a.{3}e',s)

    如果我们需要匹配以a开头,以e结尾的长度最大为7的字符,那么就可以在{}中限制查找条件

    s= "aecee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
    ret = re.findall('a.{0,5}e',s)

    我们不希望取到中间有数字、特殊符号、空格怎么办?

    s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
    ret = re.findall('a[^0-9\\n\\s&]{0,100}e',s)

    有人注意到,列表最后两个元素中存在a&e age和a6e a9e,为什么不是单独拆开的呢?

    其实这里涉及到重复元字符中默认的贪婪匹配,先是以a开头,以e结尾,以{}中最大为5来进行查找,如果5找不到,那么在以a、e之间为4个字符来进行匹配,一次类推,直到a、e之间为0个字符。而a&e age和a6e a9e中空格字符占据了一个字符的位置,实际的匹配就是a【&e ag】e和a【6e a9】e。

    注:下面的*、+、?都默认贪婪匹配

    如何取消贪婪匹配呢?可以在重复元字符后面跟一个问号,*、+、?也适用

    以s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"为例:、

    贪婪匹配:

    s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
    ret = re.findall('a[^0-9\\n\\s&]*e',s)
    

    非贪婪:

    s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
    ret = re.findall('a[^0-9\\n\\s&]*?e',s)

    1.2.2*的用法:

    *其实就是{0,∞}的缩写,即从字符串末尾开始匹配

    s= "aecee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
    ret = re.findall('a.*e',s)

    这里匹配不到字符串末尾是因为换行符的存在,通配符是匹配不到换行符的,所以,列表中出现了两个元素

    1.2.3+的用法:

    +其实就是{1,∞}的缩写

    s= "aecee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
    ret = re.findall('a.+e',s)

    1.2.4?的用法:

    ?其实就是{0,1}的缩写

    s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
    ret = re.findall('a.?e',s)
    

    取消贪婪为

    s= "aeeee apple acre ape agree age anaze animate advertise a\ne a&e age a6e a9e"
    ret = re.findall('a.??e',s)

    1.3转义符:

    代码 说明
    \w 匹配字母或数字或下划线或汉字
    \W 匹配一个非字母、非数字或非下划线字符(等价于 [^a-zA-Z0-9_]
    \d 匹配数字
    \D 匹配一个非数字字符
    \b 匹配单词的开始或结束
    ^ 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思
    $ 匹配字符串的结束
    \s 匹配任意的空白符

    二、其他语法:


    总结

    提示:这里对文章进行总结:

    例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

    作者:Melancholy 啊

    物联沃分享整理
    物联沃-IOTWORD物联网 » 细说Python操作之正则表达式

    发表回复