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结尾的字串。