删除括号之间的文本,但仅在给定条件下

Posted

技术标签:

【中文标题】删除括号之间的文本,但仅在给定条件下【英文标题】:Removing text between parentheses but only at given conditions 【发布时间】:2021-03-07 14:40:19 【问题描述】:

我有以下一句话:

敏捷的棕色狐狸跳过懒惰的狗(见第 1 册)。敏捷的棕色狐狸跳过懒狗(见上文)。敏捷的棕色狐狸跳过懒狗(见第 2 册)。敏捷的棕色狐狸跳过懒狗(见第 3 册)

我需要删除括号之间的文本 - 包括括号和外部空格 - 在以下情况下在句子内:

括号之间的文本包含单词Book; 括号之间的文字没有放在句尾。

所以那句话应该变成:

敏捷的棕色狐狸跳过了懒惰的狗。敏捷的棕色狐狸跳过懒狗(见上文)。敏捷的棕色狐狸跳过了懒狗。敏捷的棕色狐狸跳过懒狗(见第 3 册)

我知道这个正则表达式sentence.replace(/ *\([^)]*\) */g, ""); - 但我不知道如何应用上述条件。

【问题讨论】:

这个问题需要更多的研究和一些方向。例如,您可以编写一个标记器,或者您可以只使用正则表达式的简单替换。此外,使用大的拉丁示例使其更难阅读。看起来您的示例也不符合描述。看看***.com/help/how-to-ask 我没有投反对票,所以我只是猜测你为什么投反对票(这会损害选民的声誉)。至于您的问题的清晰度,您得到了两个答案,它们都适用于您的示例,但不满足问题。当问题容易且快速地被理解时(想想 30 秒或更短的时间来理解),问题就会得到支持。希望这会有所帮助。 【参考方案1】:

在这里,希望对你有帮助

const sentence = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit (see the Book "abc"). Quisque non ante nisi (see the Book "def"). Nam id justo velit (see above). Donec hendrerit dui sit amet tempus molestie (see the Book "ghi").'

console.log(sentence.replace(/\s?\([\w\s\"]*?Book[\w\s\"]*?\)\s?(?=..*\w)/gm, ''));

在这里你可以看到解释和正则表达式的实验 - https://regex101.com/r/hOZg0g/5

【讨论】:

不幸的是,它不能正常工作。我试过const sentence = "This question needs more research and a bit of direction (see Book 1); For example, you could write a tokenizer or you could just use simple substitution with a regex. Additionally (see Book 2), using large latin example makes it harder to read. It also looks like your example doesn't follow description (see Book 3)...";【参考方案2】:

另一个正则表达式:

const regex = /\s\([^)]*?Book.*?\)(?=.*\(.*?Book.*?\))/g

以JS例子的形式:

  const p = 'Text (see the Book "def"). Text (see above). Text (Book 2) with more text (Book 3).';

  console.log(p.replace(regex, ''));

【讨论】:

不幸的是,它不能正常工作。我试过const p = "This question needs more research and a bit of direction (see Book 1); For example, you could: (a) write a tokenizer or you could just (b) use simple substitution with a regex. Additionally (see Book 2), using large latin example makes it harder to read. It also looks like your example doesn't follow description (see Book 3)..."; 如果“书”的最后一个括号不在所有句子的末尾,它也行不通; 非常感谢您的回答(我已赞成)。我已经编辑了我的问题,以使其更简单、更清晰。我希望它会重新开放。 谢谢!我确实喜欢写得很好的问题!

以上是关于删除括号之间的文本,但仅在给定条件下的主要内容,如果未能解决你的问题,请参考以下文章

删除字符串中两个字符(括号)之间的文本

如何删除字符串中外括号之间的所有文本?

notepad++正则表达式删除大括号之间的所有文本

Python删除方括号和它们之间的无关信息

JavaScript / regex:删除字符串中括号之间的文本[重复]

删除括号之间的字符串 [iOS]