【问题标题】:Sublime Text: Exclude selection with regex?Sublime Text:使用正则表达式排除选择?
【发布时间】:2015-05-25 13:35:07
【问题描述】:

有没有办法用正则表达式只选择分组的部分。

对于日志文件中的以下行

Mon Feb 09 20:07:43 PKT 2015: VerifyPdb.Rama: Status: FINISHEDPART | Message: {fep=98.0, op=3.0, ac=6.0, ap=9.0}

我做了以下正则表达式

(some regex for another line)|(rama\:).*(\{.*\})

只给我这个

Rama:{fep=98.0, op=3.0, ac=6.0, ap=9.0}

不应选择其他任何内容。 .* 中的 (rama\:).*(\{.*\}) 部分应从选择中跳过。

我该怎么做?这仅适用于日志文件中的许多值之一。

【问题讨论】:

标签: regex sublimetext2 sublimetext sublimetext3


【解决方案1】:

你可以试试(?i)rama:.*\K(\{[^\}]*\})。在 Perl 中,正则表达式可以在 \K 选项的帮助下从最终匹配中省略它之前找到的所有内容。

这是 Sublime Text 2 选项的截图:

:

  • 打开文件并按CTRL+F
  • 输入Rama\:.+\K(\{[^\}]*\}) 正则表达式
  • 确保正则表达式高亮匹配处于开启状态
  • 点击查找全部
  • 按 CTRL+C

您现在应该在剪贴板中找到所有匹配项。

【讨论】:

  • 这在 Sublime Text 中不起作用。方括号\[ 是干什么用的?
  • 请重试。我猜复制/粘贴时出现问题,演示页面上的正则表达式内没有\[。如果\K 不工作(它必须根据boost.org/doc/libs/1_44_0/libs/regex/doc/html/boost_regex/… 工作,因为Sublime Text 正则表达式风格是基于Perl 的),我猜你将不得不通过使用(?i)rama:.*(\{[^\}]*\}) 或仅使用@987654333 来忍受过度高亮@ 将捕获所有 {}s。或者使用另一个支持 .NET 正则表达式的编辑器,通过 (?i)(?<=rama:.*)\{[^\}]*\} 仅获取您需要的内容。
  • 此正则表达式仅捕获 {.*} 而不是单词 rama:。哪个文本编辑器可以做到这一点?我想轻松提取日志文件中有很多数据。
  • 请查看更新后的答案,我尝试使用 Sublime Text 2 并没有遇到任何问题。
  • 没有办法选择不连续的文本。但是,您可以先获取 {} 中的文本,将它们复制到新文档中,然后在 Find What 和 @987654340 中将 Replace All 使用 ^ @ in 替换为
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多