当前位置: 首页 > 知识库问答 >
问题:

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

弓晔
2023-03-14

在使用< code>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"

正则表达式不会在第一个闭括号处停止,它会一直持续到最后一个,并删除其间的“write to keep”。

我尝试在R中应用字符串操作:在多个位置删除特定模式,而不删除模式实例之间的文本,该模式使用gsubfngsub,但无法使解决方案发挥作用。

请给我指出正确的方向来解决正则表达式删除指定字符串的问题,但不是字符串之间的字符。我更喜欢stringr解决方案,但无论什么都有效。谢谢

共有2个答案

柴瀚
2023-03-14

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

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

[1] "writing  writing to keep  more writing"
陶星波
2023-03-14

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

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

或者,您也可以使用这个:

"!\\[.*?\\)"

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

 类似资料:
  • 问题内容: 假设我想使用正则表达式删除字符串中的所有重复字符(特定字符)。这很简单- 如果我想用相应的字符替换所有重复的字符(即a,z)怎么办?我该怎么做呢? 注意: 我知道可以使用哈希表或某些O(n ^ 2)算法更好地解决这种删除重复项的方法,但是我想使用正则表达式进行探索 问题答案: 的周围的指定 捕获组 ,然后将(一个 反向引用 在图案和替换两者)指的是第一个捕获组的内容。 因此,正则表达式

  • 通常,当我想在python中使用正则表达式删除两个字符串之间的文本时,我会这样做: 其中 是我的文本,我使用上面的代码删除 z1 和 AA 之间的所有内容(包括 和 )。但是现在我正在努力为以下方面做同样的事情: 我有下面的字符串(来自乳胶。txt文件): 我的目标是替换所有的东西,从到最后一行的最后一个。我尝试了几个正则表达式组合,如和其他组合,但没有成功…我做错了什么?

  • 主要内容:所需步骤,示例代码在本教程将演示如何在JDBC应用程序中删除一个数据库表。 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中删除数据库表。 要执行以下示例,需要用实际用户名和密码替换这里用户名()和密码()。 MySQL或数据库已启动并运行。 注意:这是一个严肃的操作,必须在继续删除表之前作出明确的决定,因为删除表后,表中的所有内容都将丢失。 所需步骤 使用JDBC应用程序删除

  • 问题内容: 我正在尝试处理一堆文件,然后需要进行修改以删除文件名中的无关信息;值得注意的是,我正在尝试删除括号内的文本。例如: 我想对一整堆文件进行正则表达式,其中括号表达式可能在中间或结尾,并且长度可变。 正则表达式是什么样的?首选Perl或Python语法。 问题答案: 因此,在Python中,您可以这样做:

  • 在R中,我正在尝试编写代码,以便对字符串模式进行任何调整。字符串的示例如下: 我只想删除包含“(,|,)”模式的部分,例如: (b|c)和(1|f) 并留下: 请注意,字符可以更改值(例如,“b”可以变成“1”,“c”可以变成“预测器”),我希望代码仍然有效。字符串也不需要空格,它也可以是“y~1 a (b|c) (d^2) e (1|f) g” 或其空格/无空格的任意组合。字符的顺序也可以更改为