8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

PowerShell 中有关 '.' 字符串操作的奇怪行为

bugracetin 1月前

16 0

我正在使用 PowerShell 7.4.5。第一个例子:'ab' -split '.' 不会给你一个由 a 和 b 组成的双元素数组,而是一个由空字符串组成的四元素数组。另一个例子是'rodtipsqleastus2.database.

我正在使用 PowerShell 7.4.5。

第一个例子: 'a.b' -split '.' 没有给你一个由 a b ,而是一个由空字符串组成的四元素数组。

另一个例子是 'rodtipsqleastus2.database.windows.net'.TrimStart('rodtipsqleastus2.') 。它不会给你 database.windows.net 而是 base.windows.net

有人能解释一下吗?谢谢。

帖子版权声明 1、本帖标题:PowerShell 中有关 '.' 字符串操作的奇怪行为
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由bugracetin在本站《powershell》版块原创发布, 转载请注明出处!
最新回复 (0)
  • Olmo 1月前 0 只看Ta
    引用 2

    请注意 ('a.b').split('.') 按预期工作。

  • 关于您的第一个问题:PowerShell split 默认使用正则表达式匹配,参见 about_Split

    RegexMatch:使用正则表达式匹配来评估分隔符。这是默认行为。

    使用

    'a.b' -split '.', 0, 'simplematch'
    

    注意额外 , 0

    仅当指定了 Max-substrings 值时,您才可以使用诸如 SimpleMatch 之类的选项。

    关于您的第二个问题:假设这使用.NET TrimStart ,它采用字符数组,而不是 1:1 字符串,参见 TrimStart(Char[]) .

    这意味着

    TrimStart('rodtipsqleastus2.')
    

    将删除所有后续的 \'r\'、\'o\'、\'d\'、\'t\' 等等,直到找到第一个不在该列表中的字符。在您的例子中,即 \'b\'。

    不确定什么是最好的解决方案,也许

    'rodtipsqleastus2.database.windows.net'.Substring(17)
    

    帮你解决问题。

  • 正如 Marvin 已经指出的 , -split ,它是一个正则表达式运算符, . 在正则表达式的上下文中表示“任何字符”。

    您可以使用 String.Split() method 根据精确的子字符串进行拆分:

    $a,$b = 'a.b'.Split('.')
    

    字符与前导字符匹配,就会继续修剪字符串的开头。 String.TrimStart(<characters>) ) 只要 任何

    要删除偏移量 0 处的特定子字符串,可以使用 -replace 正则表达式运算符:

    $leadingString = 'rodtipsqleastus2.'
    $pattern = '^{0}' -f [regex]::Escape($leadingString)
    
    $domainWithoutLeadingLabel = 'rodtipsqleastus2.database.windows.net' -replace $pattern
    

    [regex]::Escape 方法将正确地转义 . 中的 $leadingString ,并且 ^ 在它前面插入的确保正则表达式引擎仅在输入字符串的开头匹配。

    如果未找到前导字符串,则 -replace 运算符将不执行任何操作,而是返回未改变的原始字符串:

    PS ~> 'rodtipsqleastus2.database.windows.net' -replace $pattern
    database.windows.net
    PS ~> 'somethingelse.database.windows.net' -replace $pattern
    somethingelse.database.windows.net
    
返回
作者最近主题: