深度长文|自然语言处理之正则表达式详解

图灵汇官网

正则表达式(Regular Expression)是一种用于描述文本模式的工具,包括普通字符(例如 a 到 z 的字母)和特殊字符(称为元字符)。尽管正则表达式看起来有些复杂,但一旦掌握,不仅可以大大提高工作效率,还能带来很大的成就感。许多编程语言都支持利用正则表达式进行字符串操作。

正则表达式在文本处理中有三大常见用途:

  1. 验证字符串中的模式:例如,可以用来检测输入字符串是否符合电话号码或信用卡号码的格式。
  2. 替换文本:可以找到文档中的特定文本,然后将其完全删除或替换为其他文本。
  3. 从字符串中提取子字符串:可以查找文档内或输入域内特定的文本。

正则表达式的基本结构是描述一个字符串匹配的模式。例如,runn+b 可以匹配 runnbrunnnb 等,这里的 + 表示前面的字符至少出现一次。runn*b 可以匹配 runbrunnb 等,* 表示前面的字符可以不出现,也可以出现一次或多次。colou?r 可以匹配 colorcolour? 表示前面的字符最多出现一次。

构造正则表达式的方法类似于创建数学表达式,可以通过多种元字符与运算符将小的表达式组合成更大的表达式。正则表达式的组成部分可以是单个字符、字符集合、字符范围、字符间的选择,或是这些组件的任意组合。

正则表达式由普通字符(如 a 到 z 的字母)和特殊字符(称为“元字符”)组成。这些模式用于检查一个字符串中是否包含某些子字符串,或者从一个字符串中提取符合条件的子字符串。

普通字符包括所有可打印和不可打印字符,如大写和小写字母、数字、标点符号和其他符号。

非打印字符也是正则表达式的组成部分,例如 n 表示换行符,t 表示制表符等。

特殊字符具有特殊含义,例如 * 表示任意数量的前面字符。如果要在正则表达式中查找这些特殊字符本身,需要对其转义,即在它们前面加上反斜杠

限定符用来指定某个组件在匹配时应该出现的次数。常见的限定符包括 *+?{n}{n,}{n,m}。其中,*+ 默认是贪婪的,即尽可能多地匹配文本,但如果在后面加上 ?,则变为非贪婪模式,只匹配最少的字符。

定位符用于将正则表达式固定在行的开始或结束位置。例如,^ 表示行的开始,$ 表示行的结束。b 用于匹配单词边界,B 用于匹配非单词边界。

选择可以通过圆括号 () 和竖线 | 来实现。例如,(cat|dog) 可以匹配 "cat" 或 "dog"。

反向引用允许捕获匹配的部分,以便后续使用。例如,(d+)s+1 可以匹配数字及其后面的重复数字。

元字符包括各种特殊字符,如 .^$*+?{}[]|,每种都有其特定的功能。

运算符优先级决定了正则表达式的计算顺序。优先级高的运算符会先被处理。

匹配规则描述了正则表达式如何与文本匹配。例如,^once 只匹配以 "once" 开头的字符串,bucket$ 只匹配以 "bucket" 结尾的字符串。如果同时使用 ^$,则表示完全匹配整个字符串。

字符簇允许匹配某一类字符,例如 [aeiou] 可以匹配任何元音字符。通过使用连字符 -,可以指定字符范围,例如 [a-z] 表示所有小写字母。

重复出现可以通过花括号 {} 来控制,例如 {n} 表示前面的内容恰好出现 n 次,{n,} 表示至少出现 n 次,{n,m} 表示出现 n 到 m 次。

通过这些基本概念,可以构建出强大的正则表达式,从而高效地处理各种文本操作。

本文来源: 图灵汇 文章作者: 陈丽慧