【问题标题】:Regex to ignore data between different types of brackets正则表达式忽略不同类型括号之间的数据
【发布时间】:2021-07-29 18:52:26
【问题描述】:

假设我有以下文本

search [search](search) search) (search)

我只想忽略前导方括号和第一个右圆括号之间的每个匹配项。

我认为我可以对中间的任何内容使用负前瞻,但我的正则表达式不起作用,因为它只是在最后一个封闭的圆括号之后再次开始突出显示。有什么想法吗?

search(?![\[\])])

【问题讨论】:

  • 编辑您的问题,并通过删除您添加但不属于真实文本的文本来修复您的输入文本。

标签: regex


【解决方案1】:

您可以使用否定字符类来查找^\)
我们查找方括号,并搜索任何不是) 的字符并在末尾添加\) 以找到结束)

(\[[^\)]+\))

这个发现:[search](search)

使用捕获组,您可以通过编程方式将它们从结果中删除。
否则我相信你将不得不解析字符串而不是使用一个正则表达式。

([^\[]+)(\[[^\)]+\))(.+)

$1$3 将是您的新字符串。

【讨论】:

  • 谢谢。这已经有所帮助,但我不知道如何找到除 [search](search) 之外的所有内容,所以正好相反。
  • 我已经对答案进行了补充。负前瞻可能会使您变得更复杂,但您必须在问题中提供确切的细节。
  • 再次感谢。我想我可能把自己解释错了。我想在提供的字符串中找到“搜索”的每个实例,但前导方括号和右圆括号之间的实例除外。实际字符串比给定示例长得多,因此解决方案需要无限适用。这里解释了一个类似的用例:stackoverflow.com/questions/7694542/… 提供的解决方案不适用于我的用例,但是,因为我不想从我的字符串中删除它们,只需在搜索中跳过它们。
  • 仅使用正则表达式很难(也许不可能)...我得到的最接近的是(?<!\[)(search(?!=\]\[^\)]+)),它仍然会在[search] 之后的圆括号中找到search。正则表达式越复杂,他们实际需要的处理就越多 - 以编程方式执行部分任务有时效率更高,可读性更高。
  • 我明白了,这就是我所担心的。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2019-02-08
  • 2011-06-22
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多