【问题标题】:Grep for a character in one element of a vectorGrep 查找向量的一个元素中的一个字符
【发布时间】:2022-12-13 02:58:50
【问题描述】:

除非我忽略了某些东西,否则我找不到以下问题的解决方案。

如果我有以下单元素向量:

c("133 45123; 4514;25")

我怎样才能找到这个元素中有“;”的位置?和“”,这样我就可以使用 substr 获得:

45123;

已经尝试过 grep,但这似乎适用于多个元素的向量。

【问题讨论】:

    标签: r grep


    【解决方案1】:
    x <- c("133 45123; 4514;25")
    
    stringr::str_extract(x, "\w+(?=; )")
    [1] "45123"
    

    在基础 R 中:

    sub(".*?(\w+); .*", "\1", x)
    [1] "45123"
    

    甚至:

    regmatches(x, regexpr("\w+(?=; )", x, perl = TRUE))
    [1] "45123"
    

    【讨论】:

    • 谢谢你。将不得不研究符号的含义,但非常优雅的解决方案,特别是考虑到它是在基数 r 中。接受了你的回答。谢谢!
    • @onyambu:为什么不是'"\d+(?=;)"'。我们有特定的理由吗?
    • @TarJae 这将捕获4514。 OP 特别声明他们只想捕获具有;" " 的元素。请注意,如果您使用 \d+(?=;) 如果我使用了贪心函数,例如 gsubstr_extract_allgregexpr 那么我将得到 2 个结果而不是一个。但是使用(?=; )我确保我只有一个结果
    【解决方案2】:

    我找到了部分解决方案。 Strsplit() 将查看向量的每个元素,并根据您指定的分隔符将单个元素分成各种较小的向量。这有助于将元素缩减为更小的向量,然后您可以在这些向量上使用 grep()。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加更多详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写出好的答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2021-08-03
    • 2019-11-06
    • 2020-02-24
    • 1970-01-01
    相关资源
    最近更新 更多