C# 用空格替换前导零

C# 用空格替换前导零,c#,python,regex,powershell,notepad++,C#,Python,Regex,Powershell,Notepad++,我有一个包含多条记录的文本文件。每个记录都有一个字段,其中有一些前导零,我需要用那个数量的空格替换这些前导零。记录将如下所示: A206 000001204 X4609 A206 1204 X4609 $str = 'A206 000001204 X4609' $re = '\b0+' if ($str -match $re) { $str -replace $re, (' ' * $matches[0].Length) } 我需要记录如下所示:

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

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

if ($str -match $re) {
  $str -replace $re, (' ' * $matches[0].Length)
}
我需要记录如下所示:

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

if ($str -match $re) {
  $str -replace $re, (' ' * $matches[0].Length)
}
我非常不熟悉正则表达式,但以下正则表达式似乎找到了我需要的匹配项:

\b0+

但是,我不知道如何更换。如果用Notepad++来替换,那就太棒了,但如果需要的话,我还可以用C#、Powershell或Python来创建一个快速程序。有人能给我一些关于正则表达式的提示吗?

是的,
\b0+
可能会有用

这里使用的是
C#

Replace()
的最后一个参数是一个简单的lambda函数,它返回的字符串长度与匹配的
0
s的数量相同,但只包含空格


您可以在
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
虽然这不使用正则表达式

我希望这能有所帮助。

使用核电站:

  • Ctrl+H
  • 查找内容:
    \b0
  • 替换为:
    (空格)
  • 全部替换
作为lambda expression解决方案的替代方案,您还可以使用以下更“传统”的方法:

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

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

我的Notepad++regex建议没有Toto的建议那么短,但要严格一点

查找内容:
(?:\K|\G)0

替换为:

这将查找一个空格,然后将其忽略(补充
\K
——保留元字符),然后分别匹配每个连续零(补充
\G
——继续元字符)

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


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

什么提示?你需要什么?你好像有正则表达式,对吧?这感觉像是一个。为什么一开始就要麻烦地重新格式化文件呢?不是所有的文本文件都可以用正则表达式解析,或者它们会变得非常混乱。我解析文本文件已经有40多年了。如果没有看到文本文件的示例,我无法给出一个很好的解决方案。@nicael-我在替换时遇到了问题。我似乎不知道如何用x个空格替换x个零。@BobKaufman-生成文件的系统无法以任何其他方式生成文件,而接受文件的系统需要该字段上没有前导零的文件。所以我需要重新格式化文件。空格在哪里?所以我使用C#解决方案,但它只用1个空格替换x个零。我需要用x个空格替换x个零。有趣。我从未在PowerShell中见过lambda委托。@BaconBits PowerShell没有lambda语法(因此,使用脚本块)替换为
(两个空格)以将前导空格保留为well@MasterXD您编辑的解决方案也可以使用!非常感谢。