用空格替换前导零

本文关键字:替换 空格 | 更新日期: 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的赞美——继续元字符)。

全部替换将产生所需结果。

我发布这篇文章是为了让这个页面更适合未来的研究人员,他们可能有稍微不同的要求。