替换不使用正则表达式

时间:2015-12-19 00:26:01

标签: regex powershell powershell-v3.0

我试图替换用户输入的字符串。我有以下输入(作为名字,姓氏)......

John, Doe

我使用以下代码:

$userInput = $userInput -replace '\s',''
$firstName = $userInput -replace ",*$",""
$lastName = $userInput -replace "^*,",""

输出如下所示:

$userInput = John,Doe
$firstName = John,Doe
$lastName = JohnDoe

我需要输出看起来像这样:

$userInput = John,Doe
$firstName = John
$lastName = Doe

我做错了什么?

1 个答案:

答案 0 :(得分:3)

,*$说要在字符串的最后找到0个或更多逗号(不是你想要的)。

^*,是......好吧,我不确定它会被认为是有效的正则表达式。我想这意味着找到0或更多“字符串的开头”后面跟一个逗号(这是一个奇怪的事情要指定)。

所以对于名字,你真的想要这样的东西:

$firstName = $userInput -replace ',.*$',''

这就是说,找到一个逗号,后跟0或更多的任何字符,后跟字符串的结尾(然后替换为空)。

姓氏:

$lastName = $userInput -replace '^.*?,',''

这就是说,找到字符串的开头,然后是0或更多的任何字符(非贪婪,这就是?之后*的意思),然后将其替换为空

Aaaand正如我写的那样,@ PetetAl评论了我的最后一个解决方案,即使用拆分:

$firstName, $lastName = $userInput -split ',\s*'