2016-06-09 59 views
0

我有一个文本文件,如下所示:格式的正则表达式匹配的文本文件,并替换

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

我需要使它看起来像这样

Chanelle 2649 
    Jettie  2466 
    ...  ... 

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

+0

我不认为你可以只用正则表达式来做到这一点。你有编程语言可用吗?你可以做一些像'/^\ s * \ d + $/m'来拉取所有数字引用,然后将左边的alpha引用('explode(“\ n”,$ string);'in PHP)分开并匹配它们1 - 1建立一个新文件。 – chris85

+0

是的我知道多种语言,但我只是试图用正则表达式来完成。正如你所说,也许它不能单独使用正则表达式 –

+0

你实际上并不需要一个正则表达式... – JanLeeYu

回答

3

我在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 
+0

不幸的是,在崇高,记事本++和在线正则表达式网站上没有匹配:( –

+0

这对我来说很好在ST3。确保你有正则表达式匹配,然后继续点击'Replace'直到所有的数字都被转置。 – MattDMo

2

虽然正则表达式answer by SeinopSys将工作,你不不需要一个正则表达式来做到这一点 - 相反,你可以利用Sublime的多个游标。

  1. 将光标置于第1行的开头,然后按住Shift键选择所有的名字。

  • 命中Ctrl键移位大号Selection -> Split into Lines)分裂成选择线。
  • Ctrl键Ç复制。

  • 将光标放在第11行(第一号线),然后按Ctrl键(在Windows/OS X)或Alt键(Linux)的放置光标在每个数字行的开头。

  • 命中Ctrl键V粘贴号码之前的名称。
  • 您现在可以删除顶部的名字和你所有的设置。另外,您也可以使用Ctrl键X削减名在步骤3
  • +0

    理论上Shift + Click也可以工作,以防名单太长而无法在合理的范围内用Shift + Down进行选择时间框架 – SeinopSys

    +0

    @SeinopSys这是真的,我在这个例子中使用了Shift-Down,因为列表的大小很小。 – MattDMo