PowerShell修剪包含“< char> $< repeated char>”的字符串的bug?

时间:2017-07-20 08:45:25

标签: powershell

如果我对包含Trim()的字符串使用-char-$-repeated char-方法,例如“BL $ LA”或“LA $ AB”,Trim()也会在$之后删除重复的字符。

例如:

$a = 'BL$LA'
$b = $a.Trim("BL$")

返回A而不是LA,但

$a = 'BM$LA' 
$b = $a.Trim("BM$")

返回LA

有什么理由?或者我错过了什么?

1 个答案:

答案 0 :(得分:2)

Trim()方法从字符串对象的开头和结尾删除给定参数中的所有字符(字符串自动强制转换为字符数组)。你的第二个例子似乎只是做你想要的,因为字符串的其余部分没有任何要修剪的字符。

演示:

PS C:\> $a = 'BL$LA'
PS C:\> $a.Trim("BL$")
A
PS C:\> $a = 'LxB$LA'
PS C:\> $a.Trim("BL$")
xB$LA

要从字符串的开头和结尾删除给定的子字符串,您需要这样的内容:

$a -replace '^BL\$|BL\$$'

正则表达式细分:

  • ^匹配字符串的开头。
  • $匹配字符串的结尾。
  • BL\$匹配文字字符序列“BL $”。
  • ...|...是一个替代(匹配任何这些(子)表达式)。

如果您只想从字符串开头删除包含第一个$的文字,您还可以执行以下操作:

$a -replace '^.*?\$'

正则表达式细分:

  • ^匹配字符串的开头。
  • \$匹配文字$字符。
  • .*?匹配所有字符,直到下一个(子)表达式(最短/非贪婪匹配)。