Notepad ++中的RegEx字符串格式

LPC*_*hip 7 notepad++ regex

我在 RegEx 方面做得很好,但有一件事我似乎无法弄清楚它是如何工作的。

如何在 NotePad++ 中搜索/替换并确保输出具有固定长度,而输入可以灵活?

例如,在这个上做一个正则表达式:23-6-2016成为:23-06-2016(06 的额外 0,但如果是 12 则不是)

另一种选择是创建这个:

TestString并且Test会变成
TestString______________________(额外的空格。)
Test____________________________(额外的空格。)

当然,这里的想法是进行批量搜索/替换,其中输出都具有相同的长度。

请解释其背后的想法。

编辑:为了了解我正在使用的数据,这里有一个我需要处理的示例行:

12345678    TXT 19700101    0   100 20160624    100 Comment text
12345678    TXT 19700101    100 100,25  20160624    0,25    Comment text
12345678    TXT 19700101    100,25  100,5   20160624    0,25    Comment text
Run Code Online (Sandbox Code Playgroud)

请注意,它们由制表符分隔。第一行的第一个 0 的格式应为 0,00,100 的格式应为 100,00,但 12345678 和日期不应格式为 ,00 最后的 100,5 的格式应为 100,50

我解决了约会的问题,所以现在不那么重要了。

Ste*_*ven 5

A 部分:垫到特定长度

要使用正则表达式用 N 个字符右填充行,请在行尾添加 N 个空格,然后将前 N 个字符分组替换其余字符。

第 1 步:添加填充字符

查找:$替换:______________________________

在行尾添加 30 个空格。(我使用下划线,因为空格不会在帖子中格式化)。

步骤 2:修剪左 30 个字符

要在行首填充以破折号分隔的日期,请相应地匹配每个部分。

查找:^([[:print:]]{0,30}).*$ 替换为\1

在该行的开头,替换最多 30 个可打印字符的组,然后用该组替换任何剩余的字符。

要选择不同的行长,请在 Pass 1 中使用 n-spaces,然后将 30 替换为 Pass 2 中的长度。

B 部分:以日期开头的行

第 1 步(每月的某一天):

查找内容:^([0-9])- 替换为:0\1-

用填充的零、数字和破折号替换模式(以单个数字开头的行,后跟破折号)。

通过 2(月)

查找内容:-([0-9])- 替换为:-0\1-

将模式(两个破折号之间的单个数字)替换为破折号、填充的零、数字和破折号。


gue*_*-vm 5

回应:

12345678 TXT 19700101 0 100 20160624 100 评论文本
12345678 TXT 19700101 100 100,25 20160624 0,25 评论文本
12345678 TXT 19700101 100,25 100,5 20160624 0,25 评论文本

对于第4列:
^((?:\S+\s+){3}\d+)(\s)\1,0\2
^((?:\S+\s+){3}\d+,\d)(\s)\10\2

对于第 5/7 列:
与上面类似,只需在规则中分别替换{3}{4}/{6}

解释
第一条规则

第1章追加,0到数字没有,。现在所有数字都必须有,\d.

第二条规则

第二个规则追加0到那些逗号后的个位数。

至于(?:):non-capture group,前面的列已经被捕获,\1因此不需要额外的捕获。

这只会将数字填充到小数点后 2 位。要填充任意数量,请使用该pad excessively, then trim方法。

最后一句话?
在我看来,notepad++ 中的普通正则表达式不足以完成这项任务。一些基本的脚本如 bash 或 perl 会以更高的可读性处理这个问题。