提取两个冒号/特殊字符之间的子字符串

时间:2019-02-12 15:18:34

标签: r regex

我想从以下字符串中使用sub()提取“ SUBSTRING”:

attribute <- "S4Q7b1_t1_r1: SUBSTRING: some explanation: some explanation - ..."

我使用了以下代码,但不幸的是它没有用:

sub(".*: (.*) : .*", "\\1", attribute) 

有人知道答案吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

sub("^[^:]*: ([^:]*).*", "\\1", attribute) 

请参见regex demo

您需要依赖于否定的字符类,[^:]匹配除:以外的任何字符,因为.*匹配贪婪地任意0个或多个字符。另外,您的模式在:之前包含一个空格,并且在字符串中缺失。

详细信息

  • ^-字符串的开头
  • [^:]*-除:以外的任何0+个字符
  • : -带空格的冒号 -([^:]*)-捕获组1(\1引用此值):除:之外的任何0+字符
  • .*-字符串的其余部分。

R Demo

attribute <- "S4Q7b1_t1_r1: SUBSTRING: some explanation: some explanation - ..."
sub("^[^:]*: ([^:]*).*", "\\1", attribute) 
## => [1] "SUBSTRING"