【发布时间】:2020-04-18 20:23:55
【问题描述】:
我想从["a", "b"] 中提取"a", "b",其中[...] 中的内容在执行操作之前是未知的。所以[...] 是唯一的标识符。
通常,提取的工作方式类似于
stringr::str_match(string = ["a", "b"]', pattern = "LEFT(.*?)RIGHT")
所以我必须找到一些东西:
stringr::str_match(string = '["a", "b"]', pattern = "[(.*?)]")
但我猜必须避开括号。
stringr::str_match(string = '["a", "b"]', pattern = "[[](.*?)[]]")
可能,现在括号被转义了,但不是(.*?)?
我尝试了什么:
-
通常,我会像
[[]一样转义括号[并使用 perl = TRUE。因此,我尝试了:stringr::str_match(string = '["a", "b"]', pattern = "[[](.*?)[]]")如上图。 使用来自Extract string between brackets的
/[^[\]]+\[[^[\]]+\]/等正则表达式
【问题讨论】:
-
您可以使用
str_extract_all,即str_extract_all(string, "[A-Za-z]") -
由于您只是基于
[、]模式提取内容,因此您只需像这样正确地转义括号:stringr::str_match(string = "sss[a, b]sss", pattern = "\\[(.*?)\\]") -
很好,谢谢!
-
您错过的只是 ICU 正则表达式需要在字符类中转义
]和[。所以,你只需要stringr::str_match(string = '["a", "b"]', pattern = "\\[(.*?)]")[,2]