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

标签 r regex

一个示例向量:

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/

相关文章:

java - 正则表达式将整个字符串放入第 1 组

正则表达式帮助 : Identifying websites in text

r - 从 R 中的同一线性模型中提取特定的相互作用系数

r - 缓存read_html

r - mc.cores > 1 在 Windows 上不受支持

r - as(x, class(k)) 错误 : no method or default for coercing “NULL” to “data.frame”

r - 小鼠的插补方法 - 数据集中的相关性。电阻

正则表达式 - 匹配前 1000 个符号

javascript - 如何仅用属性和特定类替换 img 标签

javascript - 使用 getElementById 在 javascript 中使用正则表达式进行 Html 表单验证?