r语言 - 替换时如何保留正则表达式中使用的部分字符串以进行模式匹配?



我正在使用stringr来帮助操作存储在字符向量中的一些html代码,代码如下所示:

foo <- 'text-align:left;"> 4: Forging Foundations </td>n'

在我的完整 html 代码中,我有多次出现哪些字符串代替4: Forging Foundations的变体,我需要使用整个部分代码作为要替换的模式。我正在寻找的最终文本输出是:

'text-align:left;background-color: #B0fff4 !important;"> 4: Forging Foundations </td>n'

所以我想使用带有*量词的.正则表达式代替4: Forging Foundations

foo <- str_replace_all(
foo,
'text-align:left;">.*(?=</td>n)',
'text-align:left;background-color: #B0fff4 !important">.*(?=</td>n)'
)

然而,这最终用我使用的正则表达式语法替换了我原始字符串的一部分 - 我正在寻找某种方法来保持字符向量的那部分不变。

您可以使用

gsub('text-align:left;">([^<]*</td>)', 'text-align:left;background-color: #B0fff4 !important;">\1', foo)
# => [1] "text-align:left;background-color: #B0fff4 !important;"> 4: Forging Foundations </td>n"

([^<]*</td>)部件是一个捕获组,它匹配除<以外的任何 0+ 字符,然后</td>,然后在替换模式中,使用$1替换反向引用恢复此部件。

最新更新