其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

有关于正则表达式相关的问题

GG网络技术分享 2025-03-18 16:15 3


问题描述:

import re
print(re.findall(r"[tr]\\d{6}", 'tr123456'))
为什么提取出的结果带有一个r?

网友观点:

[tr]匹配中括号里面其中一个,你的正则写的是之后就是6个数字,匹配出来的结果就是r123456塞

正则表达式中,方括号[]用来表示一组并列的字符,比如你问的[tr]就表示查找字符't'或者字符'r'。
正则表达式r"[tr]\\d{6}"表示匹配字母t或r然后紧紧接着6个数字。所以它会匹配't156543'或'r156423'这样的字符串
如果你这里的方括号是分组的意思,应该使用小括号,正则支持分组功能,在正则表达式中把想要提取的部分用小括号括起来,就可以按照小括号的顺序来找到正则的分组
比如:print(re.findall(r"(tr)(\\d{2})(\\d{4})", 'tr123456')),该正则会匹配字符串中形如'tr123456'这样的部分,并会把tr,前两个数字,后四个数字单独提取出来

正则表达式总结

正则表达式总结

最近公司培训,这周四的培训主题就是“鬼斧神工之正则表达式-施**”。对于正则表达式早有所了解,但是不够系统,真正业务上要用时,还是重度依赖百度,对百度出来的答案,是否完全符合自己的需求就不得而知。而且看 Linux 组的大佬崇**在 vim 中搜索文本经常使用正则去搜,确实效率很高。除此之外,在平时用 less 命令去查日志时,自己都是直接查询子串,然而有的时候,这种直接查询需要查询多次才能得到自己想要的日志,如果可以熟练使用正则,效率一定会翻倍。还有不管是 IDEA 还是 VsCode,在做搜索时都是支持正则搜索的,比如在 IDEA 中 Command + Shift + F 或 Command +Shift + R 做全局搜索或替换使用正则都是非常方便的。所以提前准备起来,找了本《正则表达式必知必会》学习起来,此处做一笔记。

基本

  • 正则表达式区分字母大小写
  • . 字符可以匹配任意单个字符、字母、数字、空格甚至是 . 字符本身。但在绝大多数正则表达式实现里,. 不能匹配换行符
  • \\ 用于转义
  • \\. 匹配字符 . 本身
  • \\\\ 匹配字符 \\

字符区间

  • [abc] 匹配字符 abc
  • [0-9] 等价于 [0123456789]
  • [a-z] 等价于 [abcdefghijklmnopqrstuvwxyz][A-Z] 等价于 [ABCDEFGHIJKLMNOPQRSTUVWXYZ][A-z] 等价于 [ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz](按照 Ascii 顺序),[A-Za-z0-9] 等价于 [ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]

很多程序员喜欢把一个字符也定义为一个字符区间,如 [a] 等价于 a[\\r]? 等价于 \\r?,但前者可以避免产生误解、增加可读性,所以建议一个字符也定义为字符区间

排除

  • [^a-c] 排除 abc

空白字符

  • [\\b] 匹配回退(并删除)一个字符(Backspace 键)
  • \\f 匹配换页符
  • \\r 匹配回车符
  • \\n 匹配换行符
  • \\t 匹配制表符(Tab 键)
  • \\v 匹配垂直制表符

在 Unix 或 Linux 上使用 \\n 匹配行尾标记,Windows 上使用 \\r\\n 匹配行尾标记

特定字符类型

  • \\d 匹配任何一个数字字符,等价于 [0-9]
  • \\D 匹配任何一个非数字字符,等价于 [^0-9]
  • \\w 匹配任何一个字母(大小写均可)或数字类型或下划线字符,等价于 [A-z0-9_]
  • \\W 匹配任何一个非字母(大小写均可)或数字类型或下划线字符,等价于 [^A-z0-9_]
  • \\s 匹配任何一个空白字符,等价于 [\\f\\r\\n\\t\\v ],注意包含空格
  • \\S 匹配任何一个非空白字符,等价于 [^\\f\\r\\n\\t\\v ]

转义

  • .[]\\+*?() 等具有特殊含义的符号被称为元字符,如果要匹配元字符,则需要对元字符进行转义,如 \\. 匹配字符 .\\[ 匹配字符 [\\] 匹配字符 ]\\\\ 匹配字符 \\
  • / 字符并不是元字符,在绝大多数正则表达式解析器中如果要匹配字符 / 并不需要转义,但有些解析器却要求必须转义才能够匹配,所以建议总是在需要匹配字符 / 时对其进行转义,即使用 \\/ 匹配字符 /,这样在所有解析器中都能够正常工作
  • .+ 这样的元字符出现在字符区间内部时,将会被解释为普通字符,可以不用转义,如 [\\w\\.] 等价于 [\\w.],但为了防止误解,建议显示转义

重复匹配

  • + 元字符匹配一个或多个字符,如 a+ 匹配一个或多个连续的 a[0-9]+ 匹配一个或多个连续的数字
  • * 元字符匹配 0 个或多个字符
  • ? 元字符匹配 0 个或 1 个字符
  • {n} 重复匹配 n 次
  • {m,n} 重复匹配 m ~ n 次,如 {0,1} 表示最少匹配 0 次,最多匹配 1 次,等价于 ?
  • {m,} 重复匹配至少 m 次
  • *+ 是贪婪型元字符,它们会尽可能地从一段文本的开头一致匹配到末尾,而不是碰到一个匹配时就停止,如果想要碰到第一个匹配时就停止,则应该使用元字符对应的懒惰型。* 元字符对应的懒惰型为 *?+ 元字符对应的懒惰型为 +?。如想要匹配 HTML <b> 标签中的文本,贪婪型正则如下:

标签:

提交需求或反馈

Demand feedback