正则表达式:添加空格以格式化字段

时间:2016-12-01 05:36:41

标签: regex sublimetext3

我有这个输入:

P_200:E2:0.0200

我需要这个输出:

P_200                   E2  0.0200

即,第一个“:”被空格替换,使得字段的总长度为24个字符,第二个“:”由“\ t”替换

我可以选择并替换最后一个“:”,使用类似:

:(?=[^:]*$)

我也可以选择直到第一个“:”的部分,使用类似的东西:

^[^:]+:

但我不知道如何替换它以使其格式化并且有24个字符(额外填充空格)

2 个答案:

答案 0 :(得分:1)

记事本++

使用N ++可以使用一个正则表达式和替换字符串完成,但是按两次替换所有按钮:

正则表达式:

^(?(?![^:]{24})([^:]*):([^:]*):|(.{24})[^:]*)

说明:

^                 # Match start of input string
(?                # Start of conditional statement (cs:1)
    (?![^:]{24})    # If there isn't 24 characters before colon
    ([^:]*):        # Capture 1st field value and next colon
    ([^:]*):        # Capture 2nd field value and next colon
    |               # Else
    (.{24})[^:]*    # Capture 1st 24 chars and match extra ones
)                 # End of conditional statement (cs:1)

替换为:

(?1\1                        \:\2\t:\3)

这得益于BEF string syntax的条件替换。如果存在第一个捕获组,则替换字符串将为\1 \:\2\t,其间有24个空格字符,否则将使用对第三个捕获组\3的后向引用替换它

enter image description here

Sublime Text

在Sublime Text中需要两个查找/替换步骤:

第1步

查找内容:

^(?(?![^:]{24})([^:]*):([^:]*):)

替换为:

\1                        :\2\t

第2步

查找内容:

^(.{24})[^:]*

替换为:

\1

答案 1 :(得分:0)

如果您使用的是Python:

import re
text = 'P_200:E2:0.0200'
print(re.sub(r'^(.+?):(.+?):(.+?)$', '\g<1>' + ' ' * 24 + '\g<2>\t\g<3>', text))

使用sed

echo "P_200:E2:0.0200" | sed 's/^\(.\+\?\):\(.\+\?\):\(.\+\?\)$/\1                        \2\t\3/g'

在具有正则表达式支持的文本编辑器中:

搜索:(.+?):(.+?):(.+?) 替换为:\1 \2\t\3

数字占位符“\1”,“\2”和“\3”有时采用不同的格式,例如“$1”,“$2”并且“$3”取决于您使用的编辑器。