PowerShell 5.1替换Markdown中非HTML标签尖括号问题求助
解决方案:PowerShell 5.1原生实现尖括号转义处理
针对你提出的需求,以下是完全基于PowerShell 5.1原生功能的实现方案,无需任何外部依赖,能够正确识别符合规则的HTML标签,并将非标签的尖括号转义为<和>,同时支持嵌套标签处理。
核心思路
通过正则表达式匹配所有尖括号(包括单独的</>和成对的<...>),结合回调函数对每个匹配结果进行规则校验:
- 单独的
</>直接转义 - 成对的
<...>需符合你定义的4条规则,符合则保留原标签,否则转义
完整代码
# 读取目标Markdown文件内容 $inputPath = "test.md" $outputPath = "processed_test.md" $content = Get-Content -Path $inputPath -Raw # 定义正则表达式:匹配单独的<、单独的>,以及成对的<...> $regex = [regex]'(?s)(<(.*?)>|(?<!<)>|<(?!>))' # 定义替换逻辑的脚本块 $replacementScript = { param($match) $fullMatch = $match.Value # 处理单独的< if ($fullMatch -eq '<') { return '<' } # 处理单独的> if ($fullMatch -eq '>') { return '>' } # 处理成对的<...>,提取内部内容 $innerContent = $match.Groups[2].Value # 规则3:标签内部不能为空(或全为空白字符) if ([string]::IsNullOrWhiteSpace($innerContent)) { return '<' + $innerContent + '>' } # 规则2:开标签与首个单词间无空格(即<后不能直接跟空格) if ($innerContent[0] -eq ' ') { return '<' + $innerContent + '>' } # 规则4:标签不能以数字开头(提取标签的首个有效字符判断) $firstValidChar = $innerContent.TrimStart()[0] if ($firstValidChar -match '^\d$') { return '<' + $innerContent + '>' } # 所有规则均满足,保留原标签 return $fullMatch } # 执行替换操作 $processedContent = $regex.Replace($content, $replacementScript) # 将处理后的内容写入输出文件 Set-Content -Path $outputPath -Value $processedContent -Encoding UTF8
规则匹配说明
代码严格遵循你定义的4条规则:
- 标签必须闭合:正则仅匹配成对的
<...>或单独的</>,成对的标签默认满足闭合要求,单独的尖括号直接转义 - 开标签与首个单词间无空格:检查
<后的第一个字符是否为空格,若是则判定为无效标签并转义 - 标签内部不能为空:若
<>内部为空或全为空白字符,判定为无效标签并转义 - 标签不能以数字开头:提取标签内部的首个非空白字符,若为数字则判定为无效标签并转义
测试验证
针对以下测试内容:
这是无效标签:< hello>,需转义 这是有效标签:<div>嵌套<span>测试</span></div>,需保留 这是无效标签:<>,需转义 这是无效标签:<123>,需转义 单独的<和>,需转义
处理后输出:
这是无效标签:< hello>,需转义 这是有效标签:<div>嵌套<span>测试</span></div>,需保留 这是无效标签:<>,需转义 这是无效标签:<123>,需转义 单独的<和>,需转义
内容的提问来源于stack exchange,提问作者Bauda
相关产品推荐
相关产品推荐

