如何在R中提取带有特殊字符的模式之间的字符串[重复]

Posted

技术标签:

【中文标题】如何在R中提取带有特殊字符的模式之间的字符串[重复]【英文标题】:How to extract string between to patterns with special characters in R [duplicate] 【发布时间】:2020-12-06 08:24:33 【问题描述】:

从字符串a 我想提取|Request| 和下一次出现的| 之间的所有内容:

 a <- "|Request|\nSample inlet port of the HIP cartridge with |overflow| formed "
    
 gsub(".*\\|Request\\| (.+) |.*", "\\1", a)

以这种方式应用 gsub 并没有产生预期的结果。我该怎么做呢?

【问题讨论】:

您可以使用捕获组\|Request\|([^|]+)regex101.com/r/zmUIM0/1获取值 stringr::str_match(a, "\\|Request\\|([^|]+)")[,2] 【参考方案1】:

你需要使用惰性点,而且你的输入模式应该匹配整个输入,因为你要替换为捕获组:

a <- "|Request|\nSample inlet port of the HIP cartridge with |overflow| formed "
sub("^.*\\|Request\\|\\s*(.+?)\\s*\\|.*$", "\\1", a)

[1] "Sample inlet port of the HIP cartridge with"

【讨论】:

如果 |-symbol 之后不再出现,我想获取从第一个匹配到结束的子字符串。我怎么能这样做? 我没有足够的样本输入来提出足够好的替代正则表达式,甚至值得在这里发表评论。【参考方案2】:

您可以使用sub 捕获|Request| 之后的所有内容,直到下一个| 出现。

sub(".*\\|Request\\|(.*?)\\|.*", "\\1", a)
#[1] "\nSample inlet port of the HIP cartridge with "

【讨论】:

以上是关于如何在R中提取带有特殊字符的模式之间的字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

提取遵循R中模式的字符串部分[重复]

提取两个字符R之间的字符[重复]

python regex提取字符之间的字符串[重复]

如何从字符串中提取带有“”的对象[重复]

如何在两个分隔符之间提取字符串[重复]

在R中提取以标点符号开头和结尾的文本[重复]