【问题标题】:R - test if first occurrence of string1 is followed by string2R - 测试 string1 的第一次出现是否后跟 string2
【发布时间】:2013-12-02 10:36:33
【问题描述】:

我有一个 R 字符串,格式为

s = `"[some letters and numbers]_[a number]_[more numbers, letters, punctuation, etc, anything]"`

我只是想要一种方法来检查s 是否在第一个位置包含"_2"。换句话说,在第一个_ 符号之后,单个数字是“2”吗?我如何在 R 中做到这一点?

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

例子:

39820432_2_349802j_32hfh = TRUE

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

【问题讨论】:

    标签: r contains


    【解决方案1】:

    我认为值得在这里回答通用问题“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"
    

    【讨论】:

    • 更优雅:if(grepl("ab", "aacabd")) print("found") else print("not found")
    • ifelse(grepl("ab", "aacabd"), "found", "not found")
    • 或者做任何进一步使用的输出:ifelse(grepl("ab", "aacabd"), TRUE, FALSE) or ifelse(grepl("ab", "aacabd"), 1, 0)
    【解决方案2】:
    > grepl("^[^_]+_1",s)
    [1] FALSE
    > grepl("^[^_]+_2",s)
    [1] TRUE
    

    基本上,除了__2 之外,查找开头的所有内容。

    +1 到 @Ananda_Mahto 建议 grepl 而不是 grep

    【讨论】:

    • 有没有通用的解决方案?当我不知道我提前搜索的字符串并允许它在其中包含正则表达式字符时工作的一种?
    • NVM,我发现它使用fixed=TRUE 选项和grepl,你的答案很好,OP 的标题具有误导性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多