我正在嘗試從多個空格和其他字符中清理一些文本檔案。我只希望雙引號內的文本保留在行中。
以下是文本檔案的示例:
"uid" : "Text To Remain", "id" : "Text2 To Stay",
請注意每行開頭的空字符/制表符和每行末尾的逗號。
所以我認為擺脫左邊那些空白的最簡單方法是使用正則運算式。在每一行中都有一個 space_colon_space 字串:“ :”,所以我嘗試擦除它左側的所有內容,包括字串本身。
我想出了兩個解決方案的例子:
get-content 'K:\text.txt' -ReadCount 1000 |
ForEach-Object {
$_.replace(".* : ", "").replace(",", "")
} |
Out-File 'K:\text_cleaned.txt'
此解決方案僅適用于逗號,但不適用于冒號。沒有錯誤。
第二種解決方案:
get-content 'K:\text.txt' -ReadCount 1000 |
foreach { $_ -replace ".* : " | out-file 'K:\text_cleaned.txt'
}
這有效并清除了第一個雙引號字符左側的所有內容,但我不知道如何添加一個函式來替換同一行中每行末尾的逗號。
為什么不以更簡單的方式來做呢?
我很好奇為什么第一個解決方案中的正則運算式 /.* : / 不起作用,而第二個解決方案中的正則運算式起作用。第一個沒有錯誤。
你能啟發我嗎?
uj5u.com熱心網友回復:
嘗試以下操作:
(Get-Content 'K:\text.txt' -ReadCount 0) -replace '. : "|",\s*$' |
Out-File 'K:\text_cleaned.txt'
輸出:
Text To Remain
Text2 To Stay
-ReadCount 0
一次將整個檔案讀入一個陣列,大大加快了處理速度。該
-replace
操作通過以下內容有效地替換了每行開頭的所有字符"
::
,以及最后一個"
if 后跟 a并且可能在行尾,
的空格。- 有關正則運算式的說明以及對其進行試驗的能力,請參閱此 regex101.com 頁面。
注意:假設逐字子串 : "
只出現在 "..."
字串之間,而不是嵌入其中,比如"Foo "" : "" bar"
至于你嘗試了什么:
$_.replace(".* : ", "")
.NET型別的
.Replace()
方法[string]
只執行文字(逐字)替換,因此嘗試使用正則運算式是行不通的。相比之下,PowerShell 的
-replace
運算子,是基于正則運算式的。另請注意,與.Replace
method不同,它默認不區分大小寫(盡管您可以使用它的-creplace
變體進行區分大小寫的替換)。
有關何時使用vs.的更多資訊和指導,請參閱此答案。-replace
.Replace()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524890.html
標籤:电源外壳
下一篇:Foreach-Object-Parallel回傳“‘write-host’一詞未被識別為cmdlet、函式、腳本檔案或可執行程式的名稱”