Dot-Net

替換整行會產生重複出現的替換文本

  • November 30, 2011

簡單的問題:為什麼

"x" -replace ".*", "y"

產生“yy”?

"x" -replace ".*", "y"

相當於

[Regex]::replace("x",".*","y")

根據 MSDN,您看到的結果yy基於其工作原理:

在指定的輸入字元串中,用指定的替換字元串替換與指定正則表達式匹配的所有字元串。

http://msdn.microsoft.com/en-us/library/e7f5w83z.aspx

替換將找到與正則表達式匹配的字元串並將其替換為給定的替換。因此,將 x 替換為 y ,然後將空字元串替換為 y 並得到yy.

這可以通過執行來驗證[Regex]::matches("x",".*")- 它給出兩個匹配項 - 一個用於空字元串,一個用於 x。

就其他正則表達式引擎而言,這是由於gor 全域標誌而發生的。

這也可以在 Python 中進行如下驗證(只是為了表明這不僅限於 Powershell / .Net):

>>> re.findall(".*","x")
['x', '']

引用自:https://stackoverflow.com/questions/8322066