相关文章推荐
暴走的黄豆  ·  2017江苏省王者荣耀大奖总决赛完美落幕·  1 年前    · 
温暖的啄木鸟  ·  关于一卡通行业卡余额退费的通知-广州大学财务处·  1 年前    · 
淡定的橙子  ·  上海市环境保护条例_地方性法规_上海市生态环境局·  1 年前    · 
飘逸的地瓜  ·  合肥地铁8号线一期全线洞通_施工_区间_隧道·  1 年前    · 
酒量小的手电筒  ·  CPO风口呼啸而至,800G光模块蓄势待发 ...·  2 年前    · 
Code  ›  python 字符串的搜索匹配与替换(详细)_python查找和替换特定字符串_二次蓝的博客
https://blog.csdn.net/zsq8187/article/details/109749945
长情的小熊猫
2 年前
    • Python 内的正则使用基础
      • 正则修饰符的使用
      • python 里的反向引用、捕获
    • 需求:单次匹配字符串
      • `re.match()` 函数
      • `re.fullmatch()` 函数
      • `re.search()` 函数
    • 需求:全文搜索替换字符串
      • `re.sub()` 函数
    • 需求:全文搜索匹配字符串
      • `re.findall()` 与 `re.finditer()` 函数
    • 需求:以匹配的字符分割字符串
      • `re.split()` 函数

      正则修饰符的使用

      python 里的参数用 flag 表示正则修饰符的参数。
      使用多个修饰符设置正则表达式的匹配模式: re.I | re.M 。

      修饰符 描述
      re.I 使匹配对大小写不敏感
      re.L 做本地化识别(locale-aware)匹配
      re.M 多行匹配,影响 ^ 和 $
      re.S 使 . 匹配包括换行在内的所有字符
      re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
      re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

      python 里的反向引用、捕获

      1. 反向引用:反斜杠加数字 \N 。
      2. (?<name>exp) :匹配 exp ,并捕获文本到名称为 name 的组里,也可以写成 (?'name'exp) 。
        但是在Python中,为 (?P<name>exp) 。
      • 后续可使用 group(1) 或 group(name) 获取元表达式的匹配内容。

      注意 :反向引用需要前缀 r ,否则会被 Python 误认为是进制数:比如 \1 实际意义变成 \x01 。

      需求:单次匹配字符串

      re.match() 函数

      Python 中的 match() ,需要这个 字符串以这个正则开头 ,【检验字符串开头有没有正确】。如果字符串开头有所不同就匹配失败,返回 none 。(就是许多文章说的 “检测 RE 是不是在 string 的开始位置匹配”)

      re.fullmatch() 函数

      fullmatch() :字符串完全匹配正则, 字符串完全匹配正则 【检验这个字符串是不是我们所要的东西】

      • re.match() 正则如果使用了 $ 也是可以实现这种作用的。

      re.search() 函数

      search() 是在 整个字符串里部分匹配 ,【字符串里有没有这个的东西】。值得注意的是 search() 只会匹配一次。

      需求:全文搜索替换字符串

      re.sub() 函数

      基本需求使用 replace() ,当然这里都说了 re 模块了,复杂的替换应该使用 re.sub() 。它会替换字符串里的所有匹配。

      substitute
      n. 代替者; 代替物; 代用品; 替补(运动员);
      v. (以…) 代替; 取代;

      re.sub(pattern, repl, string, count=0, flags=0)
      

      pattern:正则表达式。
      repl:要替换成的字符串,可为函数。

      • 如果是字符串会转义里面的反斜杠。
      • 如果为函数,接收一个匹配后的 Match 对象参数,需要返回要替换成的字符串。

      string:源字符串。
      count:最少要替换的次数。
      flag:正则表达式的匹配模式

      • 注意:不要用例如 re.sub(r"\d+", "0", "123", re.I) 将修饰符给设置到 count 里,应写关键字参数 flags=re.I。

      正则表达式修饰符 - 可选标志 | 菜鸟教程

      # 将“\n3.”等换为“【3】”
      oriStr = '\n3.这是第三点'
      resStr = re.sub(r'\n(\d+)\.', r'\n【\1】', oriStr)
      print(resStr)
      
      【3】这是第三点
      

      需求:全文搜索匹配字符串

      re.findall() 与 re.finditer() 函数

      1. re.findall(),返回所有匹配的一个字符串列表。
      re.findall(pattern, string, flags=0)
      
      pattern.findall(string[, pos[, endpos]])
      
      import re
      result1 = re.findall(r'\d+','runoob 123 google 456')
      pattern = re.compile(r'\d+')  # 查找数字
      result2 = pattern.findall('runoob 123 google 456')
      result3 = pattern.findall('run88oob123google456', 0, 10)
      print(result1)
      print(result2)
      print(result3)
      

      输出结果:

      ['123', '456']
      ['123', '456']
      ['88', '12']
      
      1. re.finditer(),返回所有匹配的一个迭代器,并且迭代器里面的是 Match 对象。
        迭代器只有在手动迭代的时候才会去匹配,如果目标字符串很长且不需要全部匹配的话,使用迭代器在获取到目标字符串后停下,可以提高效率。
        Match 对象意味着我们可以使用上面说到的 group(name) 引用 (?P<name>exp) 捕获的内容等。
      re.finditer(pattern, string, flags=0)
      
      import re
      it = re.finditer(r"\d+","12a32bc43jf3") 
      for match in it:  # 这里仅作演示,将所有可能的都进行匹配了
          print(match.group())
      

      需求:以匹配的字符分割字符串

      re.split() 函数

      将匹配的字符串作为 split 的字符,以其切割字符串返回列表

      re.split(pattern, string[, maxsplit=0, flags=0])
      
      >>>import re
      >>> re.split('\W+', 'runoob, runoob, runoob.')  # 注意这里是大写的W
      ['runoob', 'runoob', 'runoob', '']
      >>> re.split('(\W+)', ' runoob, runoob, runoob.')  # 小括号表示保留这个分隔符
      ['', ' ', 'runoob', ', ', 'runoob', ', ', 'runoob', '.', ''
      

      重要的一点就是可以使用小括号,将分隔符保留下来。

      本文部分参考:Python3 正则表达式 | 菜鸟教程

      这篇文章主要介绍了python字符串替换re.sub()实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 re.sub(pattern, repl, string, count=0, flags=0) pattern可以是一个字符串也可以是一个正则,用于匹配要替换的字符,如果不写,字符串不做修改。\1 代表第一个分组 repl是将会被替换的值,repl可以是字符串也可以是一个方法。如果是一个字符串,反斜杠会被处理为逃逸字符,如\n会被替换为换行,等等。repl如果是一个function,每一个被匹配到的字段串执行替换函数。 str.split() 和 re.split() string 对象的 split() 方法只适应于非常简单的字符串分割情形, 它不允许有多个分隔符或者是分隔符周围不确定的空格。 当需要更加灵活的切割字符串的时候,应该使用 re.split()方法: import re line = 'asdf f... 1.字符串的查找 Python中提供了查找操作的find( )方法,该方法它可以查找字符串中是否包含子串,如果包含子串则会返回子串首次出现的索引位置,否则返回-1。 find( )方法的语法格式: str.find(sub[,start[,end]]) #各参数含义: sub:指定要查找的子串数据。 start:开始索引,默认为0。 end:结束索引,默认为字符串的长度。 例:...... 处理excel表开头结尾相同但内容不同的数据,例:以href开头 >结尾这个正则表达式的含义是:- `href=`:匹配字符串中以“href=”开头的部分。- `[^ ]*`:匹配零个或多个非空格字符。也就是说,它会匹配“123”、“131”等数字部分。- `a`:匹配字符串中以“a”结尾的部分。 在这个示例中,首先定义一个正则表达式,用于匹配所有的数字。然后定义一个包含数字的字符串。使用 re.sub() 函数进行替换,将所有的数字替换为字符串 '[NUMBER]'。最后打印替换后的字符串。在 Python 中,可以使用 re 模块进行正则表达式匹配和替换。希望这个示例可以帮助您更好地理解如何在 Python 中使用正则表达式进行字符串替换。Python 正则替换字符串。 查找某TXT文件里面“abcdef”是否存在,如果存在,则进行替换,替换成“123456”,下面代码但是不能成功。望大侠能给帮助。=========================代码==============#!usr/bin/en...查找某TXT文件里面“abcdef”是否存在,如果存在,则进行替换,替换成“123456”,下面代码但是不能成功。望大侠能给帮助。==============... 1.replace()函数的语法为str.replace(old,new[,max]),old表示需要被替换的字符串,new表示替换的新字符串,其中max为可选字符串,若不添加可选参数max,默认将所有的多个被替换的字 文章目录字符串匹配、搜索及替换字符串开头或结尾匹配str.startswith() 和 str.endswith()用 Shell 通配符匹配字符串fnmatch() 和 fnmatchcase()字符串匹配和搜索 字符串匹配、搜索及替换 字符串开头或结尾匹配 对于字符串的检查,可以通过特定的文本模式进行匹配。在 Python 内置类型中也提供了 str.startswith() 和 str....
 
推荐文章
暴走的黄豆  ·  2017江苏省王者荣耀大奖总决赛完美落幕
1 年前
温暖的啄木鸟  ·  关于一卡通行业卡余额退费的通知-广州大学财务处
1 年前
淡定的橙子  ·  上海市环境保护条例_地方性法规_上海市生态环境局
1 年前
飘逸的地瓜  ·  合肥地铁8号线一期全线洞通_施工_区间_隧道
1 年前
酒量小的手电筒  ·  CPO风口呼啸而至,800G光模块蓄势待发 - 21经济网
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号