gpt4 book ai didi

正则表达式帮助,基于字符串末尾第 n 次出现的子集

转载 作者:行者123 更新时间:2023-12-02 16:03:45 24 4
gpt4 key购买 nike

一个示例向量:

string <- "Junk1_Junk2_Junk3__ID1_Junk4_Junk5.pdf"

我试图通过从右边数 _(下划线)来对 ID1 进行子集化;所以从右边数第二个和第三个下划线之间的子集。

预期输出:ID1

我的尝试是尝试使用双__,但这行不通,因为并非我的所有字符串列表都有它。

尝试:(_){2}([^_]+)

旁注,我正在努力适应正则表达式;请推荐一个资源来构建和测试。

感谢任何帮助。

最佳答案

你可以使用

library(stringr)
stringr::str_extract(string, "[^_]+(?=(?:_[^_]*){2}$)")

或者,与基础 R 相同的方法:

## Base R:
sub(".*?([^_]+)(?:_[^_]*){2}$", "\\1", string)

参见 regex demoR demo online .

详细信息:

  • [^_]+ - 除_ 以外的一个或多个字符
  • (?=(?:_[^_]*){2}$) - 需要两个 _ 序列的正前瞻然后是除 _ 之外的任何字符的零次或多次重复直到字符串结束
  • .*?([^_]+)(?:_[^_]*){2}$火柴
    • .*? - 任何零个或多个字符,尽可能少
    • ([^_]+) - 捕获组 1(替换模式中的 \1 指的是这个捕获的字符串):除 _ 之外的一个或多个字符
    • (?:_[^_]*){2} - _ 的两个序列然后是除 _ 之外的任何字符的零次或多次重复
    • $ - 字符串结束。

关于正则表达式帮助,基于字符串末尾第 n 次出现的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69981998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com