添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

python 里的反向引用、捕获

  1. 反向引用:反斜杠加数字 \N。
  2. (?:匹配 exp,并捕获文本到名称为 name 的组里,也可以写成 (?'name'exp)。
    但是在 Python 中,为 (?P。
  • 后续可使用 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(),返回所有匹配的一个迭代器。
        迭代器只有在手动迭代的时候才会去匹配,如果目标字符串很长且不需要全部匹配的话,使用迭代器在获取到目标字符串后停下,可以提高效率。
      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', '.', ''

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

      聊一下 TS 中的交叉类型 交叉类型不能完全按照传统编程中的 与 来理解。交叉类型的定义:将多个类型合并为一个类型,包含了所有类型的特性,而且要同时满足要交叉的所有类型。后半段话不是很好理解,看一下接口类型和联合类型的交叉类型就好理解了。接口类型的交叉类型interface Interface1 { id: number; name: strin

      java把字符串转为二进制的函数 java字符串转换成二进制

      如何把字符转换为二进制,编码有许多, 但其中国际通用的有: UTF-8 UTF-8 BOM UTF-16 UTF-16 BOM 其中对于中文来说,中文的有GBK,gb2312 直接看下面例子把字符转换成二进制:首先是GBK编码:String str="大海啊,你都是水"; byte[] bs; bs=str.getBytes("gbk"); for (byte b : bs) { 3.Native Library intelbth_x64 not availableNative Library bluecove_x64 not availablejavax.bluetooth. 4.(五)Spring源码解析:ApplicationContext源码解析 5.ArchUnit 架构测试框架