替换选项卡的细节空间

时间:2013-12-04 19:26:52

标签: regex notepad++

我有一个带有地址的大文本文件,我希望将数据拆分为3个变量。例如:

NM_LOGRADO

Street BLA BLA BLA 340
Av BLE BLI 318
Road BLI 48 Block 4

我想转变成:

NM_LOGRADO

Street(TAB)BLA BLA BLA(TAB)340
Av(TAB)BLE BLI(TAB)318
Road(TAB)BLI(TAB)48 Block 4

基本上,用tab选择第一个空格和第一个数字空格前的最后一个空格。 我正在使用Notepad ++,对于第二次替换,我尝试将'(?= [0-9])(?< =)'替换为'(TAB)',但它替换了数字前的所有空格(在第三行中)我得到Road(TAB)BLI(TAB)48 Block(TAB)4)。对于第一次替换,我不知道:(

3 个答案:

答案 0 :(得分:1)

我假设(TAB)引用制表符而不是文字字符串。

查找内容: ^(\w*) ((([A-Z]{3})( )?)+) (\d.*)$

替换为: \1\t\2\t\6

(如果我的假设不正确,请将\t替换为\(TAB\)

关键是不合适的空间:( )?。这使得前导和尾随空格不会被捕获,因此被制表符替换。

正则表达式的说明:

^行的开头
(\w*)任意数量的字母数字字符,即“街道”,“Av”,“道路” ((([A-Z]{3})( )?)+) 3个大写字母,后跟一个不合格的空格,一次或多次,即“BLA BLA BLA”,“BLE BLI”,“BLI”
(\d.*)一个数字,后跟任意数量的任何字符,即“340”,“318”,“48 Block 4”
$行尾

\1第一个捕获组,“(\ w *)”
\t标签字符
\2第二个捕获组,“((([A-Z] {3})()?)+)”
\t标签字符
\6第六个捕获组,“(\ d。*)”

答案 1 :(得分:1)

转到Search> Replace菜单(快捷键 CTRL + H )并执行以下操作:

  1. 找到:

    (?:^.+?\K | (?=[0-9]+.+))
    
  2. 替换:

    \t
    
  3. 选择单选按钮“正则表达式”

  4. 然后按Replace All

  5. 您可以使用regex101上的示例进行测试。


    <强> UPDATE1

    根据您更新的示例,试试这个:

    查找:

        ^([^ ]+) ([^0-9]+) (.+)
    

    替换:

        $1\t$2\t$3
    

    regex101进行测试。


    <强> UPDATE2

    根据您更新的示例,试试这个:

    查找:

        (?:^[^ ]+\K |(?<!Block|Ap) (?=[0-9]))
    

    替换:

        \t
    

    regex101进行测试。

答案 2 :(得分:0)

当你使用Notpad ++时,最简单的方法是不要打扰正则表达式而是使用宏。只需录制一个并播放直到行尾。你想要:

  1. 将光标放在文件的第一个字符
  2. 宏&gt;开始录制
  3. 找到一个空格并将其转换为制表符(这将替换该行的第一个空格)
  4. 按END键转到行尾
  5. 使用“find previous”命令查找该行的最后一个空格
  6. 用标签
  7. 替换该空格
  8. 转到下一行
  9. 宏&gt;停止录制
  10. 运行宏直到文件末尾