我有一个包含多个记录的文本文件。每个记录都有一个字段,其中包含一些前导零,我需要用这些空格替换。记录将如下所示:
A206 000001204 X4609
我需要记录看起来像这样:
A206 1204 X4609
我对正则表达式非常不熟悉,但以下正则表达式似乎找到了我需要的匹配项:
\b0+
但是,我不知道如何更换。 NoteA ++的ReplaceAll会很棒但我也可以根据需要用C#,Powershell或Python创建一个快速程序。任何人都可以给我一些有关正则表达式的指示吗?
答案 0 :(得分:5)
是的,\b0+
可能会有用。
此处使用C#
中的Regex.Replace()
method:
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
答案 1 :(得分:2)
这样就够了吗?
while (dataString.Contains(" 0")) // while data contains a zero after a space
dataString = dataString.Replace(" 0", " "); // Replace with two spaces
虽然这不使用正则表达式。
我希望这会有所帮助。
答案 2 :(得分:0)
使用Npp:
\b0
(空格)答案 3 :(得分:0)
作为Mathias' lambda表达式解决方案的替代方案,您还可以使用更多"传统"像这样的方法:
$str = 'A206 000001204 X4609'
$re = '\b0+'
if ($str -match $re) {
$str -replace $re, (' ' * $matches[0].Length)
}
答案 4 :(得分:0)
我的Notepad ++正则表达式建议不如Toto短,但更严格。
查找内容:(?: \K|\G)0
替换为:
这将找出一个空格,然后将其忘记(\K
的补全-Keep元字符),然后分别匹配每个连续的零(\G
的补全-继续元字符)。< / p>
全部替换将提供所需的结果。
我发布此信息是为了使此页面更适合将来可能有稍微不同要求的研究人员。