替换整行产生重复文本的重复出现

时间:2011-11-30 06:40:35

标签: .net regex powershell

简单的问题:为什么

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

产生“yy”?

2 个答案:

答案 0 :(得分:8)

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

相当于

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

根据MSDN,您看到的结果yy取决于其工作原理:

  

在指定的输入字符串中,替换匹配a的所有字符串   使用指定的替换字符串指定正则表达式。

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

替换将找到与正则表达式匹配的字符串,并将其替换为给定的替换。因此,x替换为y,然后空字符串替换为y,您得到yy

这可以通过[Regex]::matches("x",".*")来验证 - 它提供两个匹配 - 一个用于空字符串,一个用于x。

就其他正则表达式引擎而言,这是因为g或全局标志。

这也可以在Python中验证如下(只是为了表明这不仅限于Powershell / .Net):

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

答案 1 :(得分:4)

因为你匹配两次,*首先匹配整个字符串,因为它是贪婪的。然后它什么都不匹配。感谢@Tim的评论。

您应该使用的是.+