正则表达式

                     

贡献者: addis

  • 本文处于草稿阶段。
预备知识 文本文件与字符编码

  1在文本文件中搜索内容的时候,有时候想要的是某种格式而不是某些具体的字符,例如要搜索 “*月*日 消费 ** 元”,找到匹配项后需要选中这几个字(以便进行替换等操作),又或者仅选中 “元” 前面的数值(以便进行统计等)。理论上我们可以通过编程解决这个问题,但更简单地,可以用一种广为使用的表达式来达到同样的效果,就是下面要介绍的正则表达式(regular expresion)

   正则表达式在许多软件中都被支持,例如在常用的文本编辑器(如 VScode),搜索软件(如 Fileseek),和大部分编程语言(如 C++,python,Matlab)中都有很好的支持。

字符匹配

表1:字符匹配
符号 说明 例子
. 匹配单个任意字符,包括空格回车等 .at 可以匹配 batcathat
[...] 匹配方括号中的任意一个字符。如果要表示一个范围的字符可以用 - 连接 [bc]ase 可以匹配 basecase;又例如 [a-z0-9] 可以匹配任意一个小写字母或数字
[^...] 匹配任何除方括号中以外的字符 例如 [^b]ase 不能匹配 base 但可以匹配 case
\w 等效于 [a-zA-Z_0-9]
\W 等效于 [^a-zA-Z_0-9]
\s 空白字符,等效于 [ \f\n\r\t\v](注意第一个字符是空格,剩下的符号是不同功能的空格,见下文)
\S 非空白字符,等效于 [^ \f\n\r\t\v]
\d 一个数字(digit),等效于 [0-9]
\D 一个非数字,等效于 [^0-9]

重复匹配

   在表 1 的命令后面可以加上如下 quantifier

Anchors

Group

例 1 

  • 要搜索例如 error=1.23e-13 格式的字符串,且找出最大的 error。可以先搜索 error=.*?e-13,手动把 -13 依次替换为 -12 等,直到没有结果。例如最大的指数时 e-10,然后再尝试 error=9\..*?e-10error=8\..*?e-10 等。其中 \. 是小数点,.*? 匹配任意多的字符且尽可能少。
  • 在 VS code 中,要把 [链接名](网址) 替换为 \href{\%E7\%BD\%91\%E5\%9D\%80}{链接名},搜索正则表达式 \[(.*?)\]\((.*?)\),替换为为 \href{$2}{$1}
  • 例如 c[aeiou]+t 可以匹配 cat, coat 等. 其中 [aeiou] 代表 aeiou 中的任意一个, + 代表 aeiou 可以出现多次.
  • ^M\w* 匹配行首以 M 开头的一个单词, 包括 M
  • \w*m$ 匹配行末以 m 解为的一个单词, 包括 m
  • \<n\w* 匹配任何以 n 开头的单词
  • \w*e\> 匹配任何以 e 结尾的单词

1. ^ 参考 Matlab 文档相关页面


致读者: 小时百科一直以来坚持所有内容免费,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利