夜owl

困到睡不着
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

正则表达式

Posted on 2023-08-18 14:14  夜owl  阅读(68)  评论(0)    收藏  举报

正则表达式

1. 概述

正则表达式是一种用于匹配和处理文本模式的工具。它可以在文本中搜索、替换、分割和提取符合特定模式的字符串。

使用正则表达式时,您可以根据需要构建适合的模式,然后将模式应用到目标文本中进行匹配和处理。正则表达式在文本处理、数据验证、文本分析等方面有着广泛的应用。

1.1. 常用的工具

很多工具都自带正则表达式搜索,比如notepad++,vscode,如图所示,所以学习正则表达式很有用
Alt text

另外python也常用到

1.2. 网站资源

正则表达式 – 分组和引用 | 菜鸟教程
https://www.runoob.com/regexp/regexp-grouping-quoting.html

正则表达式语法参考 | PyCharm 文档
https://www.jetbrains.com/zh-cn/help/pycharm/regular-expressions.html

Regular Expressions Quick Starthttps://www.regular-expressions.info/quickstart.html

正则表达式 (Regular Expression) 基础 // 圆方
https://www.lumin.tech/articles/regex-basics/

正则表达式 - JavaScript | MDN
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_expressions

2. 常用元字符和符号

这里列举常用的,没有列举以后用到的时候也会汇总这里

2.1. .

:匹配任意单个字符,除了换行符。

2.2. *

:匹配前面的字符零次或多次。

2.3. +

:匹配前面的字符一次或多次。

2.4. ?

:匹配前面的字符零次或一次。

2.5. ^

:匹配字符串的开头。

2.6. $

:匹配字符串的结尾。

2.7. \d

:digit,匹配任意数字。

2.8. \w

:word,匹配任意字母、数字或下划线。

2.9. \s

:space,匹配任意空白字符(空格、制表符、换行符等)。

2.10. [...]

:匹配方括号中列举的任意一个字符。可以用-来表示区间

2.11. [^...]

:匹配除了方括号中列举的字符以外的任意一个字符。

2.12. ( )分组和引用

  • 分组类型

2.12.1. 捕获分组(Capturing Group)

()捕获分组,用于提取匹配的子字符串或应用其他操作。

2.12.2. 非捕获分组(Non-capturing Group)

(?:表达式)只分组但是不捕获

2.12.3. 命名分组(Named Capturing Group)

为分组指定名称,提高可读性(不同语言语法可能不同)。

Python 示例:

(?P<year\>\\d{4})\-(?P<month\>\\d{2})\-(?P<day\>\\d{2})  

JavaScript 示例:

(?<year\>\\d{4})\-(?<month\>\\d{2})\-(?<day\>\\d{2})
  • 分组引用

分组最强大的功能之一是可以在正则表达式内部或外部引用已匹配的内容。

2.12.4. 反向引用(Backreference)

在正则表达式内部引用前面的分组,使用 \数字 语法

2.12.5. 替换引用

在替换操作中引用分组内容:

  • 搜索(\d)(\r)
  • 替换\1\r\n

正则表达式 – 分组和引用 | 菜鸟教程
https://www.runoob.com/regexp/regexp-grouping-quoting.html

2.13. \

:转义,正则表达式中,一些特殊字符具有特殊含义,如果想要匹配这些特殊字符本身,需要使用反斜杠\进行转义去匹配,比如\[是匹配[

3. 常用的操作

3.1. 替换换行

正则可以识别换行符,然后就可以进行替换操作。如图,是将换行符的后面的符号变成前面
Alt text

3.2. 特定行数增加新行(捕获引用运用)

类似上面的,但是需要识别特定行数,不如数字结尾的行数才需要增加新行

正则表达式:

  • 搜索(\d)(\r)
  • 替换\1\r\n
  • 解释:
  • (\d):匹配数字(行号),并将其作为一个捕获组。
  • (\r):匹配回车符,作为第二个捕获组。
  • \1\r\n:在替换时,\1 保留原来的数字,\r\n 将回车符替换为回车换行符。

3.3. 识别字符段

\{[^}]*width="([^}]*)"[^}]*\}

这个正则表达式的具体含义如下:

  • \{:匹配左大括号 {
  • [^}]*:匹配除右大括号 } 之外的任意字符。
  • width=:匹配 width= 字符串。
  • ([^}]*):使用括号捕获分组,匹配除右大括号 } 之外的任意字符,即 width 的值。
  • [^}]*:匹配除右大括号 } 之外的任意字符。
  • \}:匹配右大括号 }