加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

R中的正则表达式

(2013-04-12 22:46:52)
分类: R

原文请见:http://blog.sina.com.cn/s/blog_6caea8bf0100xram.html

-------------------------------------------------------------------------------------------

首先声明,用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]  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("ben@sina.com","kate@sina..com","ka...te@sina.com","kate@sina.12","kate@12.sina.com")
> text
[1] "ben@sina.com"     "kate@sina..com"   "ka...te@sina.com"
[4] "kate@sina.12"     "kate@12.sina.com"
> grep("(\\w+\\.)*\\w+@(\\w+\\.)+[a-zA-Z]+",text)
[1] 1 3 5
    PS:对于正则表达式,推荐一本入门教材:《正则表达式必知必会》。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有