如何使用Stringr在特定的一组qout之间提取字符串的一部分?

时间:2019-01-07 16:28:48

标签: r stringr

我需要提取在一组qoutes之间的字符串的特定部分,并且我需要做到的是不获取也在qoutes之间的字符串的后续部分。

例如,如果我只想提取此标记标签中viewBox属性之后的qoutes之间的值;

"<svg height=\"512pt\" viewBox=\"-9 0 512 512\" width=\"512pt\" xmlns=\"http://www.w3.org/2000/svg\">"

我希望能够提取各种不同的符号,因此我尝试使用stringer中的[:print:]命令。但是我无法将提取限制为所需的qoutes集。而且,viewBox只是一个示例,因此对此没有特定的解决方案。

string <- "<svg height=\"512pt\" viewBox=\"-9 0 512 512\" width=\"512pt\" xmlns=\"http://www.w3.org/2000/svg\">"

string %>% 
  str_extract("(?<= viewBox=\")[:print:]+(?<!\" )")

当前结果是;

"-9 0 512 512\" width=\"512pt\" xmlns=\"http://www.w3.org/2000/svg\">"

期望的结果是:

"-9 0 512 512"

1 个答案:

答案 0 :(得分:1)

在正则表达式查找后,我们可以匹配非双引号(")的字符

library(stringr)
str_extract(string, '(?<=viewBox=")[^"]+')
#[1] "-9 0 512 512"