使用正则表达式删除多个实例,但不删除实例之间的文本

Remove multiple instances with a regex expression, but not the text in between instances

在使用 bookdown 的长篇文章中,我插入了大量图片。将段落组合成单个字符串(在数据框中)后,我想删除与插入图像相关的降价文本,但不删除这些插入图像之间的任何文本。这是一个玩具示例。

text.string <- "writing ![Stairway scene](/media/ClothesFairLady.jpg) writing to keep ![Second scene](/media/attire.jpg) more writing"

str_remove_all(string = text.string, pattern = "!\[.+\)")
[1] "writing  more writing"

正则表达式不会在第一个右括号处停止,它会继续到最后一个并删除中间的“writing to keep”。

我尝试应用 String manipulation in R: remove specific pattern in multiple places without removing text in between instances of the pattern,它使用 gsubfngsub 但无法使解决方案起作用。

请指出正确的方向来解决正则表达式删除指定字符串的问题,但不删除字符串之间的字符。我更喜欢 stringr 解决方案,但不管怎样。谢谢

您必须使用以下正则表达式

"!\[[^\)]+\)"

或者你也可以使用这个:

"!\[.*?\)"

两种解决方案都提供 惰性 匹配而不是 贪婪 匹配,这是您问题的关键

我认为您可以使用以下解决方案:

gsub("!\[[^][]*\]\([^()]*\)", "", text.string)

[1] "writing  writing to keep  more writing"