我想制作一个简单的PowerShell脚本,该脚本:
\input{my_folder/my_file}
的出现我的第一步是匹配不同的文件名以便导入它们,尽管以下代码不仅输出文件名,还输出\include{file1}
,\include{file2}
等。
$ms = Get-Content ms.tex -Raw
$environment = "input"
$inputs = $ms | Select-String "\\(?:input|include)\{([^}]+)\}" -AllMatches | Foreach {$_.matches}
Write-Host $inputs
我认为使用括号会创建一个匹配的组,但是失败了,您能不能向我解释为什么以及仅获取文件名而不是完全匹配的正确方法是什么?
在regex101上,此regexp \\(?:input|include)\{([^}]+)\}
似乎可以正常工作。
答案 0 :(得分:3)
您正在寻找Positive lookbehind and positive lookahead:
@'
Some line
\input{my_folder/my_file}
Other line
'@ | Select-String '(?<=\\input{)[^}]+(?=})' -AllMatches | Foreach {$_.matches}
结果
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 18
Length : 17
Value : my_folder/my_file