R - 测试第一次出现string1后是否为string2

Sta*_*nLe 52 r contains

我有一个R字符串,格式

s = `"[some letters and numbers]_[a number]_[more numbers, letters, punctuation, etc, anything]"`
Run Code Online (Sandbox Code Playgroud)

我只是想要一种检查是否s包含"_2"在第一个位置的方法.换句话说,在第一个_符号之后,单个数字是"2"吗?我如何在R中执行此操作?

我假设我需要一些复杂的正则表达式?

例子:

39820432_2_349802j_32hfh = TRUE
Run Code Online (Sandbox Code Playgroud)

43lda821_9_428fj_2f = FALSE(注意那里有一个_2,但没有在正确的位置)

Jul*_*ano 66

> grepl("^[^_]+_1",s)
[1] FALSE
> grepl("^[^_]+_2",s)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

基本上,在开头寻找一切除了_,然后是_2.

+1给@Ananda_Mahto建议grepl代替grep.


tuc*_*son 30

我认为值得回答一般问题"R - 测试字符串是否包含字符串".

为此,请使用grep函数.

# example:
> if(length(grep("ab","aacd"))>0) print("found") else print("Not found")
[1] "Not found"
> if(length(grep("ab","abcd"))>0) print("found") else print("Not found")
[1] "found"
Run Code Online (Sandbox Code Playgroud)

  • 更优雅:`if(grepl("ab","aacabd"))print("found")else print("not found")` (11认同)
  • `ifelse(grepl("ab","aacabd"),"找到","未找到") (9认同)
  • 或者进行任何进一步使用的输出:`ifelse(grepl("ab","aacabd"),TRUE,FALSE)`或`ifelse(grepl("ab","aacabd"),1,0) (2认同)