目标是从字符串中仅获取SPACE字符之前的前导数字。当我在PowerShell中使用-replace
时,会包含前导字母字符。为什么有什么不同?
PS C:\src\t> 'aasdf123 456' -replace '([\d]+) .*', '$1'
aasdf123
在产生的regex101.com上不会发生这种情况。
123
非重复
问题不在于如何获取号码。问题是为什么'aasdf'
与\d
相匹配。捕获组仅指定\d
。
答案 0 :(得分:0)
该行为是预期的。
-replace
运算符从输入字符串保持中删除所有不重叠的匹配项。 >
'aasdf123 456' -replace '([\d]+) .*', '$1'
将返回assdf123
,因为([\d]+) .*
(等于(\d+) .*
)匹配并捕获到组1中一个或多个数字,然后匹配一个空格,然后该行的其余部分,然后将整个匹配项(此处为123 456
替换为第1组的内容123
,因此,将assdf123
保留为{{1 }}操作。
您关于regex101产生另一个结果的声明是错误的:it produces the same result:
即使您查看 -replace
窗格,也有两个值:整体匹配MATCH INFORMATION
和第1组值123 456
。因此,完全没有差异。
要只得到123
,您可以使用How to get the captured groups from Select-String?