r - 如何在 R 中提取与正则表达式 (regexpr) 索引相关的文本

标签 r regex sequence

我正在使用一个专门的文本文件,它本质上是一个长长的名称列表以及与每个名称相关的随机字母序列。我正在尝试提取我感兴趣的特定共识序列。该序列可以说是“STXDXIK”,其中 X 是任何字母。我将文本文件红色到 R 中并将其命名为“TEXT”。

然后我使用正则表达式来隔离包含序列的条目列表,并将其称为“ylist”。

ylist<- TEXT[grep("ST[A-Z]D[A-Z]IK", TEXT, value=FALSE, perl=FALSE)]

然后我使用 regexpr 函数来定位我感兴趣的序列的位置,称之为“r”。

r<- regexpr("ST[A-Z]D[A-Z]IK", ylist)

现在的问题是我得到了该序列所在位置的索引,以及起始位置和匹配数。然而,我感兴趣的是提取完整的序列,而不是“ylist”中的索引,因为它对我来说很重要全长序列是什么。有人可以帮忙吗?

我已经尝试过 R 中的 substr 和 regmatches 函数,但是 substr 必须应用于每个匹配,这对我来说不实用,因为我有很多与此序列的匹配,并且 regmatches 似乎不起作用或者我不能让它工作,也许是因为我输入了错误的命令。

最佳答案

您可以组合 regexprsubstr:

TEXT <- c("tedSTXDXIKsslker","janetlkajsdfSTXDXIKalkse","maggiesdfes","sdfjkSTXDXIKryan")
r <- regexpr("ST[A-z]D[A-z]IK", TEXT)
s <- substr(TEXT, r, r+attr(r, "match.length")-1)
s
# [1] "STXDXIK" "STXDXIK" ""        "STXDXIK"

如果您想过滤"",您可以使用:

s <- s[nchar(s)>0]
# [1] "STXDXIK" "STXDXIK" "STXDXIK"

编辑:添加gregexpr示例

TEXT <- c("tedSTXDXIKsslker","janetlkajsdfSTXDXIKalkse","maggiesdfes","sdfjkSTXDXIKryan",
      "sdfjkSTXDXIKryansdfjkSTXDXIKryan")
## use gregexpr instead of regexpr
r <- gregexpr("ST[A-z]D[A-z]IK", TEXT)
## because gregexpr returns a list, we have to use mapply (or a for loop)
## please note: I use substring instead of substr here because substr returns only a vector of the same size as the input vector.
mapply(FUN=function(str, rx)substring(str, rx, rx+attr(rx, "match.length")-1), str=TEXT, rx=r)

# $tedSTXDXIKsslker
# [1] "STXDXIK"
# 
# $janetlkajsdfSTXDXIKalkse
# [1] "STXDXIK"
# 
# $maggiesdfes
# [1] ""
# 
# $sdfjkSTXDXIKryan
# [1] "STXDXIK"
# 
# $sdfjkSTXDXIKryansdfjkSTXDXIKryan
# [1] "STXDXIK" "STXDXIK"

关于r - 如何在 R 中提取与正则表达式 (regexpr) 索引相关的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18446089/

相关文章:

oracle - Oracle触发器的HIbernate问题,用于从序列中生成ID

python - 是否可以在修改列表成员时监视列表(或可变序列)?

javascript - 谷歌地图折线根本不显示

R:自动在文本前后添加引号

regex - 是否可以进一步简化这个正则表达式?

Java 正则表达式错误 :\( is not a valid character

javascript - 用星号或最后两个词替换最后一个词

r - 使用 lapply 和 read_xls 使用文件名作为列表名称

r - 如何在变量名称中使用多个正则表达式对数据帧进行子集化?

python - 在 Python 中生成数字序列(曲线)