使用正则表达式删除多个实例,但不删除实例之间的文本
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,它使用 gsubfn
和 gsub
但无法使解决方案起作用。
请指出正确的方向来解决正则表达式删除指定字符串的问题,但不删除字符串之间的字符。我更喜欢 stringr
解决方案,但不管怎样。谢谢
您必须使用以下正则表达式
"!\[[^\)]+\)"
或者你也可以使用这个:
"!\[.*?\)"
两种解决方案都提供 惰性 匹配而不是 贪婪 匹配,这是您问题的关键
我认为您可以使用以下解决方案:
gsub("!\[[^][]*\]\([^()]*\)", "", text.string)
[1] "writing writing to keep more writing"
在使用 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,它使用 gsubfn
和 gsub
但无法使解决方案起作用。
请指出正确的方向来解决正则表达式删除指定字符串的问题,但不删除字符串之间的字符。我更喜欢 stringr
解决方案,但不管怎样。谢谢
您必须使用以下正则表达式
"!\[[^\)]+\)"
或者你也可以使用这个:
"!\[.*?\)"
两种解决方案都提供 惰性 匹配而不是 贪婪 匹配,这是您问题的关键
我认为您可以使用以下解决方案:
gsub("!\[[^][]*\]\([^()]*\)", "", text.string)
[1] "writing writing to keep more writing"