繁体   English   中英

用空格替换前导零

[英]Replace leading zeros with spaces

我有一个包含多条记录的文本文件。 每条记录都有一个字段,其中包含一些前导零,我需要用该数量的空格替换这些零。 记录将如下所示:

A206   000001204   X4609

我需要记录看起来像这样:

A206        1204   X4609

我对正则表达式非常陌生,但以下正则表达式似乎找到了我需要的匹配项:

\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

这足够了吗?

while (dataString.Contains(" 0")) // while data contains a zero after a space
    dataString = dataString.Replace(" 0", "  "); // Replace with two spaces

虽然这不使用正则表达式。

我希望这会有所帮助。

使用 NPP:

  • Ctrl + H
  • 查找内容: \\b0
  • 替换为: (一个空格)
  • 全部替换

作为Mathias 的lambda 表达式解决方案的替代方案,您还可以使用更“传统”的方法,如下所示:

$str = 'A206   000001204   X4609'
$re  = '\b0+'

if ($str -match $re) {
  $str -replace $re, (' ' * $matches[0].Length)
}

我的 Notepad++ regex 建议不像 Toto 那样简短,但更严格一些。

找出什么: (?: \\K|\\G)0

替换为:

这将寻找一个空格,然后忘记它( \\K赞美——Keep 元字符),然后单独匹配每个连续的零( \\G赞美——Continue 元字符)。

全部替换将提供所需的结果。

我发布此内容是为了使此页面更适合未来可能有略有不同要求的研究人员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM