与grep和正则表达式匹配的部分字符串

时间:2014-01-03 02:11:11

标签: regex string r grep

我有一个包含三个字符串的向量,我正在尝试编写一个命令,该命令将查找该向量的哪些成员具有特定字母作为第二个字符。

作为一个例子,假设我有这个三字母蜇的向量......

example = c("AWA","WOO","AZW","WWP")

我可以使用grepl和glob2rx来查找以W作为第一个或最后一个字符的字符串。

> grepl(glob2rx("W*"),example)
[1] FALSE  TRUE FALSE  TRUE

> grepl(glob2rx("*W"),example)
[1] FALSE FALSE  TRUE FALSE

但是,当我尝试将其与glob2rx(*W*)

一起使用时,我得不到正确的结果
> grepl(glob2rx("*W*"),example)
[1] TRUE TRUE TRUE TRUE

我确信我对正则表达式的理解缺乏,但这似乎是一个非常简单的问题,我似乎无法找到解决方案。我真的很喜欢一些帮助!

为了将来的参考,我也非常想知道我是否可以将其扩展到我有更长字符串的情况。假设我有5个字符长的字符串,我可以使用grepl以这种方式返回W是第三个字符的字符串吗?

2 个答案:

答案 0 :(得分:8)

我原本以为这是正则表达方式:

>  grepl("^.W",example)
[1]  TRUE FALSE FALSE  TRUE

如果您想要一个预先指定的特定职位,那么:

>  grepl("^.{1}W",example)
[1]  TRUE FALSE FALSE  TRUE

这将允许程序化计算:

pos= 2
n=pos-1
grepl(paste0("^.{",n,"}W"),example)
[1]  TRUE FALSE FALSE  TRUE

答案 1 :(得分:4)

如果你有3个字符的字符串并且需要检查第二个字符,你可以测试适当的子字符串而不是使用正则表达式:

example = c("AWA","WOO","AZW","WWP")
substr(example, 2, 2) == "W"
# [1]  TRUE FALSE FALSE  TRUE