Description

grep、grepl、regexpr、gregexpr和regexec在字符向量的每个元素中搜索与参数模式匹配的参数:它们在结果的格式和详细程度上有所不同。

sub和gsub分别替换第一个匹配项和所有匹配项。

Usage

  • 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)
  • 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)
  • 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)

Arguments

  • pattern:包含正则表达式的字符串;
  • x,text:寻找匹配的字符向量(或者可以被as.character强制转换为字符串的其他对象);
  • ignore.case:FALSE表示区分大小写,TRUE表示不区分;
  • perl:逻辑值,表示是否使用perl支持的字符表达式;
  • value:如果为假,则返回包含grep确定的匹配项的(整数)索引的向量;如果为真,则返回包含匹配元素本身的向量;
  • fixed:如果为真,pattern是要按原样匹配的字符串;
  • useBytes:如果为真,则按字节而不是按字符进行匹配;
  • invert:如果为真,则返回不匹配的元素的索引或值;
  • replacement:在sub和gsub中替换匹配的模式。对于fixed = FALSE,它可以包含对模式的括号子表达式的反向引用“\1”到“\9”。仅对于perl = TRUE,它还可以包含“\U”或“\L”来将替换的其余部分转换为大写或小写,“\E”转换为结束大小写转换。

Details

3种模式:

  1. fixed = TRUE:精确(普通)匹配;
  2. perl = TRUE:Perl正则匹配;
  3. fixed = FALSE, perl = FALSE:使用POSIX扩展正则匹配。

sub和gsub的不同仅在于替换第一个匹配项和所有匹配项。

对于regexpr、gregexpr和regexec,pattern如果为NA将会报错,否则NA是允许的,并给出一个NA匹配。

注意:R中转义需要用两个反斜杠\\。

Value

grep(value = FALSE)返回x元素的索引向量。

grep(value = TRUE)返回一个包含选定的x元素的字符向量。

grepl返回一个逻辑向量(对于x的每个元素是否匹配)。

regexpr返回一个与文本长度相同的整数向量,给出第一个匹配项的起始位置,如果没有匹配项,则返回-1,并带有一个整数向量“match.length”,给出匹配文本的长度(或-1表示没有匹配)。

gregexpr返回一个与文本长度相同的列表,其中每个元素的形式与regexpr的返回值相同,只是给出了每个匹配的起始位置。

regexec返回一个与文本长度相同的列表,如果没有匹配,则每个元素的长度为-1,或者返回一个整数序列,其中包含匹配的起始位置和与模式的圆括号子表达式对应的所有子字符串,并带有“match”属性。

sub和gsub返回与x相同长度和相同属性的字符向量。没有被替换的字符向量x的元素将不变地返回。

Examples

普通匹配

txt <- c("arm","foot","lefroo", "bafoobar")
grep("foo", txt)
[1] 2 4
Hide
grep("foo", txt, value = TRUE)
[1] "foot" "bafoobar"

普通替换

## Double all 'a' or 'b's;  "\" must be escaped, i.e., 'doubled'
gsub("([ab])", "\\1_\\1_", "abc and ABC")
[1] "a_a_b_b_c a_a_nd ABC"

regexpr匹配 位置和长度

txt <- c("The", "licenses", "for", "General")
regexpr("en", txt)
[1] -1 4 -1 2
attr(,"match.length")
[1] -1 2 -1 2
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE

不同匹配方式

## trim trailing white space
str <- "Now is the time "
sub(" +$", "", str) ## spaces only
[1] "Now is the time"
Hide
## what is considered 'white space' depends on the locale.
sub("[[:space:]]+$", "", str) ## white space, POSIX-style
[1] "Now is the time"
Hide
## what PCRE considered white space changed in version 8.34: see ?regex
sub("\\s+$", "", str, perl = TRUE) ## PCRE-style white space
[1] "Now is the time"

回溯引用&perl大小写转换

## capitalizing
txt <- "a test of capitalizing"
gsub("(\\w)(\\w*)", "\\U\\1\\L\\2", txt, perl=TRUE)
[1] "A Test Of Capitalizing"
Hide
gsub("\\b(\\w)", "\\U\\1", txt, perl=TRUE)
[1] "A Test Of Capitalizing"

捕获命名

## named capture
notables <- c(" Ben Franklin and Jefferson Davis",
"\tMillard Fillmore")
# name groups 'first' and 'last'
name.rex <- "(?<first>[[:upper:]][[:lower:]]+) (?<last>[[:upper:]][[:lower:]]+)"
(parsed <- regexpr(name.rex, notables, perl = TRUE))
[1] 3 2
attr(,"match.length")
[1] 12 16
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
attr(,"capture.start")
first last
[1,] 3 7
[2,] 2 10
attr(,"capture.length")
first last
[1,] 3 8
[2,] 7 8
attr(,"capture.names")
[1] "first" "last"
Hide
parse.one <- function(res, result) {
m <- do.call(rbind, lapply(seq_along(res), function(i) {
if(result[i] == -1) return("")
st <- attr(result, "capture.start")[i, ]
substring(res[i], st, st + attr(result, "capture.length")[i, ] - 1)
}))
colnames(m) <- attr(result, "capture.names")
m
}
parse.one(notables, parsed)
first last
[1,] "Ben" "Franklin"
[2,] "Millard" "Fillmore"

URL拆分

## Decompose a URL into its components.
## Example by LT (http://www.cs.uiowa.edu/~luke/R/regexp.html).
x <- "http://stat.umn.edu:80/xyz"
m <- regexec("^(([^:]+)://)?([^:/]+)(:([0-9]+))?(/.*)", x)
m
[[1]]
[1] 1 1 1 8 20 21 23
attr(,"match.length")
[1] 26 7 4 12 3 2 4
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
Hide
regmatches(x, m)
[[1]]
[1] "http://stat.umn.edu:80/xyz" "http://"
[3] "http" "stat.umn.edu"
[5] ":80" "80"
[7] "/xyz"

字符提取

在R中没有找到合适的提取字符串中某一部分的函数,所以自己编写了一个如下。

比如,提取所有大写字母开头的单词。

SUB<-function(t,REG)
{
m<-gregexpr(REG, t)
start<-m[[1]]
stop<-start+attr(m[[1]],"match.length")-1
l<-length(start)
r<-rep("1",l)
for(i in 1:l)
{
r[i]<-substr(t,start[i],stop[i])
}
return(r)
}
temp<-c("I love Study",
"I have A CAT",
"there is a Blue Pen")
lapply(temp,SUB,REG="[A-Z][A-Za-z]*")

R中的Regex的更多相关文章

  1. R中一切都是vector

    0.可以说R语言中一切结构体的基础是vector! R中一切都是vector,vecotor的每个component必须类型一致(character,numeric,integer....)!vect ...

  2. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  3. R中的par()函数的参数

    把R中par()函数的主要参数整理了一下(另外本来还整理了每个参数的帮助文档中文解释,但是太长,就分类之后,整理为图表,excel不便放上来,就放了这些表的截图)

  4. 关于R中的mode()和class()的区别

    本文原创,转载请注明出处,本人Q1273314690(交流学习) 说明:本文曾经在15年11月在CSDN发过,但是由于CSDN不支持为知笔记的发布为博客的API功能,所以,自今天起,转移到博客园(幸好 ...

  5. R中的name命名系列函数总结

    本文原创,转载请注明出处,本人Q1273314690 R中关于给行列赋名称的函数有 dimnames,names,rowname,colname,row.names 这五个函数,初学的时候往往分不清楚 ...

  6. 总结——R中查看属性的函数

    本文原创,转载注明出处,本人Q1273314690 R中知道一个变量的主要内容和结构,对我们编写代码是很重要的,也可以帮我们避免很多错误. 但是,R中有好几个关于属性查看的函数,我们往往不知道什么时候 ...

  7. R中创建not-yet-evaluated对象

    create not-yet-evaluated object在R中创建 not-yet-evaluated(就是some code we will evaluated later!!)对象;然后执行 ...

  8. R中,去掉dataframe中的NA行

    R中使用complete.cases 和 na.omit来去掉包含NA的行 现在有个一data.frame  datafile如下所示 Date        sulfate nitrate ID 1 ...

  9. 机器学习:形如抛物线的散点图在python和R中的非线性回归拟合方法

    对于样本数据的散点图形如函数y=ax2+bx+c的图像的数据, 在python中的拟合过程为: ##最小二乘法 import numpy as np import scipy as sp import ...

随机推荐

  1. selenium元素定位(一)

    Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css selector 这8种定位方 ...

  2. [LC] 45. Jump Game II

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  3. [LC] 42. Trapping Rain Water

    Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...

  4. java实现银行管理系统

    Bank类 package First; import java.util.TreeSet; //银行类public class Bank {        private String Bankna ...

  5. Redhat7 配置https

    Redhat7 配置https 分为自签名证书和第3方证书(此时实验为第3方,自签名略) 安装: # yum install httpd mod_ssl 生成key: # openssl genrsa ...

  6. Java并发编程入门与高并发面试(三):线程安全性-原子性-CAS(CAS的ABA问题)

    摘要:本文介绍线程的安全性,原子性,java.lang.Number包下的类与CAS操作,synchronized锁,和原子性操作各方法间的对比. 线程安全性 线程安全? 线程安全性? 原子性 Ato ...

  7. javaweb 中 error-page

    我们的请求找不到时,会跳到错误页面,tomcat提供了一个错误页面,但是不太好.分析:tomcat自带错误页面不好的原因:有一下两点: 1.不好看: 2.不能为seo做出贡献.思考:如何解决以上问题? ...

  8. ZooKeeper源码阅读——client(二)

    原创技术文章,转载请注明:转自http://newliferen.github.io/ 如何连接ZooKeeper集群   要想了解ZooKeeper客户端实现原理,首先需要关注一下客户端的使用方式, ...

  9. java文件压缩ZipOutPutStream

    其实最好的书籍就是javaAPI 1.创建ZipOutPutStream流,利用BufferedOutputStream提个速. 2.新建zip方法,用来压缩文件,传参 3.zip方法利用putNex ...

  10. 吴裕雄--天生自然 python数据分析:健康指标聚集分析(健康分析)

    # This Python 3 environment comes with many helpful analytics libraries installed # It is defined by ...