R语言中的正则表达式

Python019

R语言中的正则表达式,第1张

p匹配的是它自己,这就是原义表达式。

本来只想匹配 . ,但是在这里这个点代表了所有字符,于是返回了1 2 3。这个. 就是一个转义表达式。

分别提取含7-9的数字或3-4的数字的字符串

^XX就是以XX开头的意思

当^放在方括号内是取非的意思

2{2,3}是寻找2倍重复了2到3次的意思

2{2,}是寻找2倍重复了大于2次(2到+无穷)的意思

fo+表示+紧跟着的o可以被重复1次或1次以上

大括号也可以起到这样的作用

若想让紧跟在o后面的对fo都起作用,需要小括号

与+用法一致。+表示重复了1次或1次以上,*表示0次或0次以上。

.* 可以匹配任意字符

管道符连接前后,符合其一即会被返回

\\b也可以起到一样的作用,但\\b更灵活,既可以放开头也可以放结尾。(\\b主要是匹配边界)

\的作用就是说明^不是开头的意思,是要去匹配这个符号

对所有的转义符号都适用

首先你要知道正则表达式怎么写,如果你的a变量第一个字符是字母那你就写gsub(“^\w”,“”,text);如果你的a变量第一个字符是数字那就写gsub(“^\d”,“”,text);如果第一个字符即可能是数字也可能是字母那就写gsub(“^[0-9a-zA-Z]”,“”,text)。如果第一个字符是中文,你去搜一下中文的正则表达式,再替换之即可。

首先声明,用R来处理字符串数据并不是一个很好的选择,还是推荐使用Perl或者Python等语言。不过R本身除了提供了一些常用的字符串处理函数,也对正则表达式有了一定的支持,具体各个函数的使用方法还是要参考R的帮助文档。

sub()与gsub()使用正则表达式对字符串进行替换。

grep()、regexpr()、gregexpr()都是用于正则表达式的匹配,只是返回的结果格式有些不同。

几个函数的使用格式如下:

grep(pattern, x, ignore.case = FALSE, extended = TRUE,

perl = FALSE, value = FALSE, fixed = FALSE, useBytes = FALSE)

regexpr(pattern, text, ignore.case = FALSE, extended = TRUE,

perl = FALSE, fixed = FALSE, useBytes = FALSE)

gregexpr(pattern, text, ignore.case = FALSE, extended = TRUE,

perl = FALSE, fixed = FALSE, useBytes = FALSE)

sub(pattern, replacement, x,

ignore.case = FALSE, extended = TRUE, perl = FALSE,

fixed = FALSE, useBytes = FALSE)

gsub(pattern, replacement, x,

ignore.case = FALSE, extended = TRUE, perl = FALSE,

fixed = FALSE, useBytes = FALSE)

其中参数pattern表示用于匹配的正则表达式模式;参数x和text表示用于搜索的字符串向量;参数ignore.case为FALSE时,表示模式匹配是对字母的大小写敏感;参数VALUE也是一个逻辑变量,若为FALSE,grep函数会返回一个由匹配元素所在的位置组成的向量,若为TRUE,则返回由匹配元素本身组成的向量;参数replacement只在函数sub和gsub中出现,用于进行替换,如果fixed=FALSE,可通过\1,...,\9来回溯引用匹配模式中由括号括起来的子表达式。如果参数perl=TRUE,还可以通过\U或\L将匹配字符转换成大写或小写。

一些示例代码:

>grep("[a-z]", letters)

[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

[25] 25 26

#参数value的使用

>grep("[a-z]", letters,value=TRUE)

[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r"

[19] "s" "t" "u" "v" "w" "x" "y" "z"

#将字符串的首字母转换为大写

>gsub("^(\\w)", "\\U\\1", "a test of capitalizing", perl=TRUE)

[1] "A test of capitalizing"

#将字符串中每个单词的首字母转换为大写

>gsub("\\b(\\w)", "\\U\\1", "a test of capitalizing", perl=TRUE)

[1] "A Test Of Capitalizing"

#对电子邮件地址进行匹配为例,用一个正则表达式来匹配电子邮件地址是一项很常见的任务。

>text<-c("[email protected]","[email protected]","[email protected]","[email protected]","[email protected]")

>text

[1] "[email protected]" "[email protected]" "[email protected]"

[4] "[email protected]" "[email protected]"

>grep("(\\w+\\.)*\\w+@(\\w+\\.)+[a-zA-Z]+",text)

[1] 1 3 5