我有这个输入:
P_200:E2:0.0200
我需要这个输出:
P_200 E2 0.0200
即,第一个“:”被空格替换,使得字段的总长度为24个字符,第二个“:”由“\ t”替换
我可以选择并替换最后一个“:”,使用类似:
:(?=[^:]*$)
我也可以选择直到第一个“:”的部分,使用类似的东西:
^[^:]+:
但我不知道如何替换它以使其格式化并且有24个字符(额外填充空格)
答案 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
的后向引用替换它
在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
”取决于您使用的编辑器。