用空格替换前导零
本文关键字:替换 空格 | 更新日期: 2023-09-27 17:59:15
我有一个包含多条记录的文本文件。每个记录都有一个字段,其中有一些前导零,我需要用这个数量的空格来替换。一个记录将是这样的:
A206 000001204 X4609
我需要这样的记录:
A206 1204 X4609
我对regex非常不熟悉,但下面的regex似乎找到了我需要的匹配项:
'b0+
然而,我不知道如何进行更换。Notepad++的ReplaceAll会很棒,但如果需要,我也可以用C#、Powershell或Python创建一个快速程序。有人能给我一些关于正则表达式的指针吗?
是的,'b0+
可能会工作。
这里使用C#
中的Regex.Replace()
方法:
using System.Text.RegularExpressions;
Regex.Replace(inputString, @"'b0+", m => "".PadLeft(m.Value.Length,' '));
Replace()
的最后一个参数是一个简单的lambda函数,它返回一个长度与匹配的0
数量相同的字符串,但仅由空格组成
您可以在PowerShell
中执行同样的操作,用scriptblock
代替lambda函数:
PS C:'> $inputString = 'A206 000001204 X4609'
PS C:'> [regex]::Replace($inputString, ''b0+', {param($m) ' ' * $m.Value.Length})
A206 1204 X4609
使用Npp:
- Ctrl+H
- 查找内容:
'b0
- 替换为:
(空格)
- 全部替换
这就足够了吗?
while (dataString.Contains(" 0")) // while data contains a zero after a space
dataString = dataString.Replace(" 0", " "); // Replace with two spaces
尽管这不使用正则表达式。
我希望这能有所帮助。
作为Mathias lambda表达式解决方案的替代方案,您还可以使用一种更"传统"的方法,如
$str = 'A206 000001204 X4609'
$re = ''b0+'
if ($str -match $re) {
$str -replace $re, (' ' * $matches[0].Length)
}
我的Notepad++regex建议没有Toto的建议那么短,但它稍微严格一点。
查找内容:
替换为:'K
这将寻找一个空间,然后忘记它('G
的赞美——保持元字符),然后单独匹配每个连续的零(CCD_13的赞美——继续元字符)。
全部替换将产生所需结果。
我发布这篇文章是为了让这个页面更适合未来的研究人员,他们可能有稍微不同的要求。