【问题标题】:Replacing only the first occurrence of a word in a string仅替换字符串中第一次出现的单词
【发布时间】:2016-10-17 14:55:07
【问题描述】:

我在正则表达式方面遇到了一些问题,主要是因为我认为我能找到的信息并不是专门针对 powershell 的,而且我尝试过的所有示例要么出错,要么无法按预期工作。我正在尝试用另一个单词替换字符串中第一次出现的单词,但不替换该单词的任何其他出现。以字符串为例:

My name is Bob, her name is Sara.

我想将第一次出现的name 替换为baby,这样得到的字符串就是

My baby is Bob, her name is Sara.

我一直在https://regex101.com/ 工作,试图构建并查看我选择的内容,但正如我所说,这些都没有正则表达式的 powershell 风格。因为我可以关闭global 标志,它似乎选择了第一次出现但不在powershell中。所以我真的不知道从哪里开始,此时所有真正拥有的是选择所有出现的单词namewith:

$test = "My name is Bob, her name is Sara."
$test -replace 'name', 'baby'

【问题讨论】:

    标签: powershell


    【解决方案1】:

    一种替换n次的方法:

    $test = "My name is Bob, her name is Sara."
    [regex]$pattern = "name"
    $pattern.replace($test, "baby", 1) 
    
    > My baby is Bob, her name is Sara
    

    【讨论】:

    • 所以1 只是说替换你找到的第一个? 2 会同时替换两者吗?如果你说 3 并且只有两个词 name 会出错还是只替换前两个词?
    • 是的,它的替换数量。如果您传递的数字大于单词的实际频率,它将全部替换。
    • 这是一种更直观的方法,并且可以更好地处理变量。
    【解决方案2】:

    您可以捕获前后的所有内容并替换它:

    'My name is Bob, her name is Sara.' -replace '(.*?)name(.*)', '$1baby$2'
    

    【讨论】:

    • 哇,效果很好。我想我已经接近了,我尝试了一些类似 $1 和 $2 的例子,但无法让它正常工作。谢谢您的帮助。我没有完全理解这些示例是如何工作的,但现在这很有意义。
    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2014-03-21
    • 2021-04-17
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多