【问题标题】:Format a text file by regex match and replace通过正则表达式匹配和替换格式化文本文件
【发布时间】:2016-06-09 19:53:58
【问题描述】:

我有一个如下所示的文本文件:

   Chanelle
   Jettie
   Winnie
   Jen
   Shella
   Krysta
   Tish
   Monika
   Lynwood
   Danae
   2649
   2466
   2890
   2224
   2829
   2427
   2816
   2648
   2833
   2453

我需要让它看起来像这样

   Chanelle   2649
   Jettie     2466
   ...        ...

我在 sublime 编辑器上尝试了很多,但无法找出正则表达式来做到这一点。有人可以证明它是否可以完成。

【问题讨论】:

  • 我认为您不能仅使用正则表达式来做到这一点。你有可用的编程语言吗?您可以执行类似/^\s*\d+$/m 之类的操作来提取所有数字引用,然后拆分剩余的 alpha 引用(PHP 中的 explode("\n", $string);)并将它们 1 - 1 匹配以构建一个新文件。
  • 是的,我知道多种语言,但我正在尝试仅使用正则表达式来完成此操作。正如你所说,也许它不能单独使用正则表达式来完成
  • 你实际上不需要正则表达式...

标签: regex sublimetext2 sublimetext


【解决方案1】:

我在 Notepad++ 中测试了以下内容,但它应该可以通用。

使用这个作为搜索字符串:

(?:(\s+[A-Za-z]+)(\r?\n))((?:\s*[A-Za-z]*\r?\n)+)\s+(\d+)

这是替代品:

$1 $4$2$3

使用它运行一次替换将一次执行一行,如果您多次运行它,它将继续替换行,直到没有匹配的行。

或者,如果您想让值按制表符对齐,您可以使用它作为替换,但它并非在所有情况下都匹配:

$1\t\t$4$2$3

【讨论】:

  • 不幸的是,在 sublime、notepad++ 和在线正则表达式网站上没有匹配项:(
  • 这在 ST3 中对我来说很好用。确保您启用了正则表达式匹配,然后继续点击Replace,直到所有数字都被转置。
【解决方案2】:

虽然正则表达式 answer by SeinopSys 可以工作,但您不需要正则表达式来执行此操作 - 相反,您可以利用 Sublime 的多个游标。

  1. 将光标放在第 1 行的开头,然后按住 Shift 选择所有名称。

  1. 点击 CtrlShiftL (Selection -> Split into Lines) 将所选内容分成几行。

  1. CtrlC 复制。

  2. 将光标放在第 11 行(第一个数字行)并按 CtrlShift (Windows/OS X)或 AltShift (Linux) 将光标放在每个数字行的开头。

  1. CtrlV 将名称粘贴到数字之前。

  1. 您现在可以删除顶部的名称,一切就绪。或者,您可以使用 CtrlX 在步骤 3 中剪切名称。

【讨论】:

  • 理论上 Shift+Click 应该也可以工作,以防名单太长而无法在合理的时间范围内使用 Shift+Down 进行选择
  • @SeinopSys 是的,我只是在这个例子中使用了 Shift-Down,因为列表很小。
猜你喜欢
  • 2014-05-12
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 2012-05-16
相关资源
最近更新 更多