替换不使用正则表达式
replace not working with regex
我正在尝试替换用户输入的字符串。我有以下输入(作为名字、姓氏)...
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
我做错了什么?
,*$
表示在字符串的末尾找到 0 个或多个逗号(不是你想要的)。
^*,
是..好吧,我不太确定它会被认为是有效的正则表达式。我想这意味着找到 0 个或更多 "beginning of string" 后跟一个逗号(指定它很奇怪)。
所以对于名字,你真的想要这样的东西:
$firstName = $userInput -replace ',.*$',''
就是说,找到一个逗号后跟 0 个或多个任意字符后跟字符串的结尾(然后什么都不替换)。
姓氏:
$lastName = $userInput -replace '^.*?,',''
这就是说,找到字符串的开头,后面跟着任意字符的0个或多个(非贪心,就是*
后面的?
的意思),然后替换掉一无所有
Aaaand 在我写这篇文章时,@PetSerAl 评论了我最后的解决方案,即使用拆分:
$firstName, $lastName = $userInput -split ',\s*'
我正在尝试替换用户输入的字符串。我有以下输入(作为名字、姓氏)...
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
我做错了什么?
,*$
表示在字符串的末尾找到 0 个或多个逗号(不是你想要的)。
^*,
是..好吧,我不太确定它会被认为是有效的正则表达式。我想这意味着找到 0 个或更多 "beginning of string" 后跟一个逗号(指定它很奇怪)。
所以对于名字,你真的想要这样的东西:
$firstName = $userInput -replace ',.*$',''
就是说,找到一个逗号后跟 0 个或多个任意字符后跟字符串的结尾(然后什么都不替换)。
姓氏:
$lastName = $userInput -replace '^.*?,',''
这就是说,找到字符串的开头,后面跟着任意字符的0个或多个(非贪心,就是*
后面的?
的意思),然后替换掉一无所有
Aaaand 在我写这篇文章时,@PetSerAl 评论了我最后的解决方案,即使用拆分:
$firstName, $lastName = $userInput -split ',\s*'