7.2.2 使用正则表达式匹配规则字符串
正则表达式是一种特殊的文本模式,能够使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,进而替换、删除、提取该字符子串。在文本分析中,正则表达式通常可以配合一些模式匹配函数来对文本数据进行处理。
首先给出常用元字符及其含义描述,如表7-1所示。
表7-1 常用元字符及其描述

接下来,结合stringr包中的str_view和str_view_all函数来介绍如何使用上述元字符。
1.基础匹配
除元字符外,几乎所有可显示的字符都可以直接作为正则表达式匹配它们自身,如“a”可以匹配“a”,“0”可以匹配“0”等,我们可以通过字符本身来进行精确匹配,示例如下(结果如图7-2所示):


图7-2 精确匹配
点运算符(.)可以匹配除换行符外的任意单个字符,示例如下(结果如图7-3所示):
![]()

图7-3 任意匹配
通过输出结果可以看到,“.”匹配了每个字符串的第一个字母,但是并没有匹配“.”本身,这是因为在正则表达式中这类字符已经被转义,故不再用来匹配它们自身。那么,如果想要匹配这类字符,应该怎样做呢?
在正则表达式中,需要使用转义字符来对这类有特殊含义的字符(正则表达式中的元字符)进行匹配。在R语言中,正则表达式也使用“\.”来去除某些字符的特殊含义。因此,若需要匹配“.”,则需要使用“\.”。然而,“\”也是元字符,也需要使用“\”对其进行转义,因此,在正则表达式中,需要使用“\\.”来匹配“.”,示例如下(结果如图7-4所示):
![]()

图7-4 匹配特殊字符
通过输出结果可以发现,我们已经成功匹配到了“.”。如果需要匹配其他元字符,也需要注意转义字符的使用。
正则表达式还可以指定匹配的位置,“^”表示在开头位置匹配,“$”表示在末尾位置进行匹配,示例如下(结果如图7-5所示):


图7-5 匹配开头和结尾部分
3.匹配字符集
字符集可以用[]来表示,[^]表示否定字符集。例如,[abc]表示匹配a、b、c中任意一个字符,[^abc]表示匹配除a、b、c外的任意一个字符,示例如下(结果如图7-6所示):

4.重复匹配
正则表达式还可以进行重复匹配,其中,“?”表示匹配0次或1次,“+”表示匹配1次或多次,“*”表示匹配0次或多次。正则表达式默认采用贪婪匹配的模式,即匹配尽可能多的字符,如果需要采用惰性匹配的模式,可以在末尾加上问号,示例如下(结果如图7-7所示):


图7-6 匹配字符集

图7-7 重复匹配