R: 正则表达式

Posted li-20151130

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R: 正则表达式相关的知识,希望对你有一定的参考价值。

 

正则表达式:

例:sub("a","",c("abcd","dcba"));   [1] "bcd" "dcb",将向量中的两个字符串中的a都去掉了。

“^” 匹配一个字符串的开始

sub("^a","",c("abcd","dcba")); [1] "bcd"  "dcba"  ,表示将开头为 a 的字符串中的 a 替换成空,在返回值中可以发现后面出现的a并没有被替换。

sub("^ab","",c("abcd","dcba")); [1] "cd" "dcba"  , 如果要将开头的一个字符串替换,简单地写成“^ab”就行。

“^”还可以表示逻辑的补集,需要写在“[]”中

sub("[^ab]","",c("abcd","dcba"));[1] "abd" "cba" ,由于sub只替换搜寻到的第一个,因此这个例子中用gsub效果更好

gsub("[^ab]","",c("abcd","dcba"));  [1] "ab" "ba"

“[]” 还可以用来匹配多个字符,如果不使用任何分隔符号,则搜寻这个集合; “[-]”的形式可以匹配一个范围,

sub("[ab]","",c("abcd","dcba")); [1] "bcd" "dca" 中,和"a|b"效果一样。

sub("[a-c]","",c("abcde","edcba")); [1] "bcde" "edba"  匹配从 a 到 c 的字符,

sub("[1-9]","",c("ab001","001ab")); [1] "ab00" "00ab"  匹配从1到9的数字。

$” 匹配一个字符串的结尾

sub("a$","",c("abcd","dcba")); [1] "abcd" "dcb"   ,表示将以 a 结尾的字符串中的 a 替换成空。

"." 表示除了换行符以外的任意一个字符

sub("a.c","",c("abcd","sdacd")); [1] "d"     "sdacd"

“*” 表示将其前的字符进行0个或多个的匹配

sub("a*b","",c("aabcd","dcaaaba")); [1] "cd"  "dca"。类似地,

“?” 匹配 0 或 1 个正好在它之前的那个字符

“+” 匹配1或多个正好在它之前的那个字符

“.*” 可以匹配任意字符

sub("a.*e","",c("abcde","edcba")); [1] ""      "edcba" 

“|” 表示逻辑的或

sub("ab|ba","",c("abcd","dcba")); [1] "cd" "dc",可以替换ab或者ba。。

 

以上是最基础的正则表达式元字符,在一些正则表达式的书籍和资料中有非常详细的介绍。

最后需要提一下的是“贪婪”和“懒惰”的匹配规则

默认情况下是匹配尽可能多的字符,是为贪婪匹配,比如 sub("a.*b","",c("aabab","eabbe")); [1] ""   "ee",默认匹配最长的a开头b结尾的字串,也就是整个字符串。

如果要进行懒惰匹配,也就是匹配最短的字串,只需要在后面加个“?”,比如 sub("a.*?b","",c("aabab","eabbe")); [1] "ab"  "ebe" ,就会匹配最开始找到的最短的a开头b结尾的字串。

 

以上是关于R: 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式

R语言之正则表达式

正则表达式与新行之间的内容不匹配 (\r\n)

为啥你需要 (?(R)...|...) if 正则表达式中的条件?

带有`\R`的Java-8 正则表达式否定回溯

如何在 java 8 正则表达式中使用 \R [重复]