我有一個字串:
[33m[TEST][90m [93ma wonderful testorius line[90m ([37mbite me[90m) which ends here.
你是不是能看到它(如計算器將洗掉它,當我將它張貼),但有一個特殊的Unicode字符每之前[xxm這里xx是一個變數數,[以及m是固定的。您可以在此處找到特殊字符:https : //gist.githubusercontent.com/mlocati/fdabcaeb8071d5c75a2d51712db24011/raw/b710612d6320df7e146508094e84b92b34c77d48.cmd10
所以,它是這樣的(特殊字符在這里用 $ 顯示):
$[33m[TEST]$[90m $[93ma wonderful testorius line$[90m ($[37mbite me$[90m) which ends here.
現在,我想洗掉$[xxm此行中的所有子字串,因為它僅用于彩色監視器輸出,但不應保存到日志檔案中。
所以預期的結果應該是:
[TEST] a wonderful testorius line (bite me) which ends here.
我嘗試使用 RegEx 但我不明白它(可能由于特殊字符和開放括號而更加混亂)并且我無法在正常.Replace ("this","with_that")操作中使用通配符。
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
在這個簡單的例子,下面的-replace操作都可以,但是請注意,這并不足夠強勁洗掉所有的變化ANSI /虛擬終端轉義序列:
# Sample input.
$formattedStr = '`e[33m[TEST]`e[90m `e[93ma wonderful testorius line`e[90m (`e[37mbite me`e[90m) which ends here.' -replace '`e', [char] 27
# Windows PowerShell solution. "$([char] 27)" expands to an ESC char.
$formattedStr -replace "$([char] 27)\[\d*m"
# PowerShell (Core) 7 solution, where "`e" directly represents an ESC char.
$formattedStr -replace "`e\[\d*m"
一般而言,建議在生成此類 for-display 格式字串的程式中尋找選項,以使其輸出純文本字串,這樣就不會出現事后剝離轉義序列的需要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/379952.html
上一篇:如何讓我的網格填充所有單元格?
