我想从以下字符串中使用sub()提取“ SUBSTRING”:
attribute <- "S4Q7b1_t1_r1: SUBSTRING: some explanation: some explanation - ..."
我使用了以下代码,但不幸的是它没有用:
sub(".*: (.*) : .*", "\\1", attribute)
有人知道答案吗?
答案 0 :(得分:1)
您可以使用
sub("^[^:]*: ([^:]*).*", "\\1", attribute)
请参见regex demo
您需要依赖于否定的字符类,[^:]
匹配除:
以外的任何字符,因为.*
匹配贪婪地任意0个或多个字符。另外,您的模式在:
之前包含一个空格,并且在字符串中缺失。
详细信息
^
-字符串的开头[^:]*
-除:
以外的任何0+个字符:
-带空格的冒号
-([^:]*)
-捕获组1(\1
引用此值):除:
之外的任何0+字符.*
-字符串的其余部分。attribute <- "S4Q7b1_t1_r1: SUBSTRING: some explanation: some explanation - ..."
sub("^[^:]*: ([^:]*).*", "\\1", attribute)
## => [1] "SUBSTRING"