我有一个由三个字符串组成的向量,我正在尝试编写一个命令来查找向量的哪些成员将特定字母作为第二个字符。
举个例子,假设我有这个由 3 个字母组成的向量......
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 是第三个字符的字符串吗?
最佳答案
我会认为这是正则表达式的方式:
> 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
关于r - 使用 grep 和正则表达式进行部分字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20895383/