gpt4 book ai didi

regex - Powershell:拆分路径在 -Replace 中不起作用

转载 作者:行者123 更新时间:2023-12-01 10:36:48 26 4
gpt4 key购买 nike

我想预处理C代码,替换#include "../../abc/efg/hij.h"“hij.h”

我用命令

'#include "../../abc/efg/hij.h"' -replace '(#include\s+)(".*\w+\.h")',"$(Split-Path -Leaf `$2)"

做替换。然而,无论我如何尝试(使用单引号/双引号、$() 等方法),最终的字符串(我还没有Set-Content , 只是想在标准输出中看到结果)仍然是 "../../abc/efg/hij.h".

当我运行 Split-Path -Leaf "../../abc/efg/hij.h" 时,结果是 hij.h,它是正确。

有人能告诉我为什么会这样吗?非常感谢!

最佳答案

似乎很奇怪,您正在使用正则表达式进行路径解析,但随后又尝试使用 Split-Path 来通过 commandlet 进行解析。为什么不完全用正则表达式替换?

通过捕获它并用任何东西替换它来摆脱你不想要的部分:

PS C:\> '#include "../../abc/efg/hij.h"' -replace '(?<=#include\s+")(.*/)(?=\w+\.h")'
#include "hij.h"

或者通过捕获它并将其放入新行来保留您想要的部分:

PS C:\> '#include "../../abc/efg/hij.h"' -replace '#include\s+".*/(.*\.h)"','#include "$1"'
#include "hij.h"

关于regex - Powershell:拆分路径在 -Replace 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34010802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com