R语言中正则表达式的规则
正则表达式表通常被用来检索、替换那些符合某个模式(规则)的文本。在我看来,正则表达式的主要用途有两种:①查特定的信息②查并编辑特定的信息,也就是我们经常用的替换。。比如我们要在Word,记事本等里面使用快捷键Ctrl+F,进行查一个特定的字符,或者替换一个字符,这就使用了正则表达式。
正则表达式的功能非常强大,尤其是在文本数据进行处理中显得更加突出。R中的grep、grepl、sub、gsub、regexpr、gregexpr等函数都使用正则表达式的规则进行匹配。这几个函数原型如下:
grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE,
fixed = FALSE, useBytes = FALSE, invert = FALSE)
grepl(pattern, x, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
regexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
gregexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
regexec(pattern, text, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
这里是对参数进行一个解释说明。
参数 | 说明 |
pattern | 正则表达式 |
x, text | 字符向量或字符对象,在R 3.0.0后版本中,最大支持超过2^31个的字符元素。 |
ignore.case | 默认FALSE,表示区分大小写,TRUE时表示不区分大小写。 |
perl | 是否使用Perl兼容的正则表达式 |
value | 默认为FALSE,当查到时返回1,否则返回0;当为TRUE查到时返回整个x,text,否则返回0。 |
fixed | 如果为TRUE,pattern是要匹配的字符串。覆盖所有冲突的参数 |
useBytes | 默认为false,当为true时,则是逐字节逐字节匹配而不是逐字符逐字符匹配。 |
invert | 如果TRUE返回不匹配的元素的索引或值。 |
replacement | 如果查到之后,进行替换,若没有到,则返回x,text值 |
接下来我们对这几个函数谈谈他们的不同点。
函数 | 作用 | |
grep() | 查,存在参数value,返回结果是匹配项的下标 | |
grepl() | 查,返回值为true | |
sub() | 只对查到的第一个内容进行替换。(同下) | |
gsub() | 对查到的所有内容进行替换,返回替换后的text;否则直接返回text | |
regexpr() | 返回一个与给出第一个匹配的起始位置的文本长度相同的整数向量,如果没有则返回-1, “match.length”给出匹配文本长度的整数向量(或-1)。匹配位置和长度为字符。 | 除了regexec,目前不支持Perl风格()的正则表达式。 。useBytes的主要效果是避免关于多字节语言环境中的无效输入和伪匹配的错误/警告,但对于regexpr,它会更改输出的解释。它禁止具有标记编码的输入的转换,并且如果发现任何输入被标记为“字节”,则被强制参见编码)。 无关匹配对多字节语言环境中的字节没有多大意义,如果useBytes = TRUE,您应该希望它只适用于ASCII字符。 regexpr和gregexpr与perl = TRUE允许Python风格的命名捕获,但不是长矢量输入。 当前语言环境中的无效输入最多警告5次。 对于非ASCII字符,与PERL = TRUE的无符号匹配取决于使用“Unicode属性支持”编译的PCRE库:外部库可能不是。 如果你正在做很多的正则表达式匹配,包括非常长的字符串,通常将正则表达式引擎设为PCRE,这将将比默认正则表达式引擎快,而fixed = TRUE更快(特别是当每个模式只匹配几次时)。 |
gregexpr() | 返回一个与文本长度相同的列表,每个元素的格式与regexpr的返回值相同,除了给出了每个(不相交)匹配的起始位置。 | |
regexec() | 返回与文本相同长度的列表,如果没有匹配,则返回-1,或者具有匹配的起始位置的整数序列和对应于模式的括号子表达式的所有子串,其中属性“match .length“给出匹配长度的向量(或没有匹配的-1)。 | |
正则表达式转义字符 | ||
空白元字符 | [\b] | 回退(并删除)一个字符(backspace) |
\f | 换页符 | |
\n | 换行符 | |
\r | 回车符 | |
\t | 制表符(tab) | |
\v | 垂直制表符 | |
注:\r\n是windows所用的文本行结束符,Unix和Linux只是用一个换行符来结束一个文本行 | ||
匹配数字与非数字 | \d | 任何一个数字字符,等价于[0-9] |
\D | 任何一个非数字字符,等价于^[0-9] | |
匹配字母\非字母与数字 | \w | 任何一个字母数字字符(大小写均可以)或下划线字符(等价于[a-zA-Z0-9]) |
\W | 任何一个非字母数字或下划线字符(等价于[^a-zA-Z0-9]) | |
匹配空白字符 | \s | 任何一个空白字符(等价于[\f\n\r\t\v]) |
\S | 任何一个非空白字符(等价于[^\f\n\r\t\v]) | |
POSIX字符类 | [:alnum:] | 任何一个字母或数字(等价于[a-ZA-Z0-9]) |
[:alpha:] | 任何一个字母(等价于[a-ZA-Z]) | |
匹配邮箱的正则表达式 [:blank:] | 空格或制表符(等价于[\t ]) 注:t后面有一个空格 | |
[:cntrl:] | ASCII控制字符(ASCII 0到31,再加上ASCII 127) | |
[:digit:] | 任何一个数字(等价于[0-9]) | |
[:graph:] | 和[:print:]一样,但不包括空格 | |
[:lower:] | 任何一个小写字母(等价于[a-z]) | |
[:print:] | 任何一个可打印字符 | |
[:punct:] | 既不属于[:alnum:],也不属于[:cntrl:]的任何一个字符 | |
[:space:] | 任何一个空格字符,包括空格(等价于[f\n\r\t\v ] 注:v后面有一个空格 | |
[:upper:] | 任何一个大写字母(等价于[A-Z]) | |
[:xdigit:] | 任何一个十六进制数字(等价于[a-fA-F0-9]) | |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论