【问题标题】:Regex Find and Replace Text Not Between ()正则表达式查找和替换不在 () 之间的文本
【发布时间】:2020-10-21 15:53:58
【问题描述】:

我在 Sublime 文本中有一个与此类似的文本文件

line 1
line 2
line 3
(line 4) hello (line6)
line 5 line 5
line 6 (line 6)

我想删除所有不在括号内的文本:(),同时保留括号内的内容。

我写了这个正则表达式,但它选择了括号内的所有内容而不是括号外的内容。

\([^)]*\)

有谁知道解决这个问题的正确正则表达式。

谢谢

更新:正则表达式不会匹配同一行的第二次出现。

【问题讨论】:

  • 一行括号内可以有多个字符串吗?例如。 line 6 (line 6) line 7 (line 7) line 8。如果是,预期的输出应该是什么?

标签: regex replace find sublimetext3


【解决方案1】:

匹配任一:

  • 不情愿地从开始到括号或结束
  • 不情愿地放在括号中
  • 贪婪地从括号到结尾

正则表达式:

^.*?(\(|$)|\).*?\(|\).*

请参阅live demo(包括一个包含 3 个括号术语的额外示例行)。

用空格替换。

如果要在此操作后删除空白行,请将^\n 替换为空白。

【讨论】:

  • 似乎工作得很好,但是我在同一行有多个括号的问题。例如,它只匹配第一个括号集,而不是第二个,请查看更新主帖。
  • @user2883306 我增强了正则表达式以处理一行中任意数量的括号文本 - 请参阅新演示。
【解决方案2】:

你可以使用

查找内容:[^()]*\(([^()]*)\)[^()]*
替换为:$1\n

查看regex demo 和regex graph:

详情

  • [^()]* - 除了 ) 和 ( 之外的 0 个或多个字符
  • \( - 一个 ( 字符
  • ([^()]*) - 第 1 组 ($1):除 ( 和 ) 之外的零个或多个字符
  • \) - 一个 ) 字符
  • [^()]* - 除) 和( 之外的0 个或多个字符。

SublimeText 演示:
五

【讨论】:

    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多