如何仅捕获目标括号内子字符串?PowerShell正则表达式问题
提取Markdown链接中的文本内容
原PowerShell代码
$String = @' the fox [GO Here] jumped up HERE Using [IMB](www.IMB.com) Using [Xerox](www.Xerox.com) Using [Banana](www.Banana.com) the fox [GO Here] jumped up '@ $String -replace "\[(.*?)\]\(", "$1"
实际执行输出
the fox jumped up Using (www.foxtrot.com) Using (www.IMB.com) Using (www.Xerox.com) Using (www.Banana.com) the fox jumped up
期望输出
IMB Xerox Banana
解决方案
原代码用-replace仅替换了字符串局部内容,无法直接提取目标文本。要实现需求,需先匹配所有符合Markdown链接格式的内容,再提取其中的文本部分:
$String = @' the fox [GO Here] jumped up HERE Using [IMB](www.IMB.com) Using [Xerox](www.Xerox.com) Using [Banana](www.Banana.com) the fox [GO Here] jumped up '@ # 匹配所有「[文本](链接)」格式的内容,提取括号内的文本 [regex]::Matches($String, '\[([^\]]+)\]\([^)]+\)') | ForEach-Object { $_.Groups[1].Value }
正则说明
\[([^\]]+)\]:匹配[开头的部分,捕获[和]之间的所有非]字符(即需要提取的链接文本)\([^)]+\):匹配后面的(...)链接地址部分,确保只匹配完整的Markdown链接结构[regex]::Matches()返回所有符合规则的匹配项,通过Groups[1]获取每个匹配中捕获的文本内容
内容的提问来源于stack exchange,提问作者gaberiel__
相关产品推荐
相关产品推荐

