Powershell 拆分未返回预期结果

Powershell split not returning expected result

Powershell 5.1.1 returns 当我对字符串使用拆分函数时出现意外结果。

例如:

"some_user@domain.s483.hgy.i.lo.uk".split("@domain.")[-1]
>> uk

我希望看到 domain.hgy.i.lo.uk 而不是 uk

这是一个错误还是我在这里遗漏了什么?这似乎适用于更高版本的 powershell。有人可以解释一下吗?

使用-split运算符如下:

"some_user@domain.s483.hgy.i.lo.uk" -split [regex]::Escape("@domain.")
some_user
s483.hgy.i.lo.uk

如果您坚持使用 Split() 方法,则使用

 "some_user@domain.s483.hgy.i.lo.uk".Split([string[]]'@domain.',[System.StringSplitOptions]::None)
some_user
s483.hgy.i.lo.uk

后者基于对可与 Split() 方法一起使用的不同参数集列表的熟悉程度:

''.split
OverloadDefinitions
-------------------
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)

如果您想在 @domain. 的第一个字符处拆分但 不删除 "domain.",请使用 -split 正则表达式运算符先行断言:

("some_user@domain.s483.hgy.i.lo.uk" -split "@(?=domain\.)")[-1]

参见 for how to force PowerShell to pick the correct String.Split() overload,尽管它不会帮助您保留 domain. 部分

或者将“@”符号前的所有内容替换为空:

'some_user@domain.s483.hgy.i.lo.uk' -replace '.*@'

domain.s483.hgy.i.lo.uk