2016-07-30 87 views
-3

我有一個包含多個記錄的文本文件。每條記錄都有一個字段,其中有一些前導零,我需要用這些空格替換。 A記錄看起來像這樣:用空格替換前導零

A206 000001204 X4609 

我需要的記錄是這樣的:

A206  1204 X4609 

我用正則表達式非常陌生,但下面的正則表達式似乎找到了我需要的匹配:

\b0+ 

但是,我不知道如何做替換。一個ReplaceAll for Notepad ++將非常棒,但如果需要,我還可以在C#,Powershell或Python中創建一個快速程序。任何人都可以給我一些關於正則表達式的指針嗎?

+2

什麼指點?你需要什麼?你似乎有正則表達式,對吧? – nicael

+2

這感覺就像一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。爲什麼要在第一時間重新格式化文件? –

+0

不是所有的文本文件都可以用正則表達式解析,或者它們會變得非常混亂。我一直在解析文本文件超過40年。沒有看到文本文件的樣本,我無法給出一個很好的解決方案。 – jdweng

回答

5

是的,\b0+可能會工作。

這裏使用Regex.Replace() methodC#

using System.Text.RegularExpressions; 

Regex.Replace(inputString, @"\b0+", m => "".PadLeft(m.Value.Length,' ')); 

的最後一個參數Replace()是一個簡單的λ的函數,返回相同的長度匹配0 S的數的字符串,但僅由空格


你可以做同樣的PowerShell,爲lambda函數替換一個scriptblock

PS C:\> $inputString = 'A206 000001204 X4609' 
PS C:\> [regex]::Replace($inputString, '\b0+', {param($m) ' ' * $m.Value.Length}) 
A206  1204 X4609 
+1

空間在哪裏? –

+0

@StefanPochmann沒有考慮那些,現在修復了 –

+0

所以我使用C#解決方案,但它只用1個空格替換了x個零。我需要用x個空格替換x個零。 – NathanK

2

這是否足夠?

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

雖然這不使用正則表達式。

我希望這會有所幫助。

+0

替換爲'「」'(兩個空格)以保留前導空格 –

+0

注意到,感謝那 – MasterXD

+0

@MasterXD您編輯的解決方案作爲好!謝謝! – NathanK

0

使用NPP:

  • 按Ctrl + ^h
  • 查找內容:\b0
  • 替換爲:(空格)
  • 全部替換
0

作爲替代Mathias' lambda表達式解決方案,您也可以使用像這樣的更「傳統」做法:

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

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