【问题标题】:Remove everything from string before given variable在给定变量之前从字符串中删除所有内容
【发布时间】:2019-06-26 18:02:28
【问题描述】:

我有一个字符串some\string/with/**/special\chars\haha。在变量中我持有chars 字符串,我尝试删除之前的所有内容,包括chars,所以预期的输出将是\haha

我试过了:

$temp = "some\string/with/**/special\chars\haha"
$tmp="chars"
$temp -replace '(?s)^.*$tmp', ''

$temp -replace '(?s)^.*$([regex]::Escape($tmp))', ''

但唯一有效的是当我将字符串直接放入正则表达式条件时。只有这个例子给出了预期的输出:

$temp -replace '(?s)^.*chars', ''

我做错了什么?

编辑: 我需要在正则表达式中使用变量,因为我遍历了多个像这样的字符串,而我想要删除的部分并不总是具有相同的字符串(例如:some\string/with/**/special\chars\haha -> \haha;C:\st/h/*/1234\asdf\x -> \x)。所以总而言之,我在正则表达式中使用变量时遇到问题,而不是正则表达式本身,因为当我用字符串替换变量时,它按预期工作(如上所示)

【问题讨论】:

  • 此帖子中的 PS 标签无效。我对你的问题感到困惑,你在技术上没有做错任何事,因为你有最终命令的预期输出
  • 我需要在正则表达式中使用变量。当我使用变量时,命令的输出与输入相同。另一方面,当我使用有问题的示例中的字符串时,我会收到正确的输出。所以我需要帮助在正则表达式中使用变量。我会进一步澄清这个问题
  • 这里没有替换变量$tmp,因为单引号字符串不受字符串插值的影响:'(?s)^.*$tmp'。替换引号将启用此功能,但我不确定您的正则表达式是否会给出您正在寻找的结果。

标签: powershell


【解决方案1】:

试试

$temp = "some\string/with/**/special\chars\haha"
$tmp="chars"
$regex = '(?s)^.*' + $tmp
$temp -replace $regex, ''

【讨论】:

    【解决方案2】:

    看起来这是因为您在正则表达式中使用单引号而不是双引号。这意味着变量$tpm 没有被使用。

    你的代码应该是这样的:

    $temp = "some\string/with/**/special\chars\haha"
    $tmp="chars"
    $temp -replace "(?s)^.*$tmp", ''
    

    您的代码使用 $tmp 而不是 $tmp 变量中的实际值。

    【讨论】:

    • 感谢您的解释。您的回答以及对@boxdog 的赞扬解释了我做错了什么。因为这恰好解决了我的问题,所以这是公认的答案。 **对于未来的读者 - Justin Cooksey 的回答也很有效!
    猜你喜欢
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多