You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求正则表达式:用AutoHotKey格式化维基百科信息框Wikicode

解决AutoHotKey格式化维基百科信息框Wikicode的方案

核心思路

要实现规范格式,需分两步处理:

  • 第一步:统一所有参数行的开头格式,同时规范等号前后的空格
  • 第二步:计算最长参数名的长度,为每个参数名补充空格使等号对齐

步骤1:统一行首与等号格式

在AutoHotKey中使用正则替换,将不规范的参数行转换为标准开头:

; 处理单行参数,统一格式
FormattedText := RegExReplace(InputText, "m`a)^|(\w[\w\s.]+?)\s*=\s*(.*)$", " | $1 = $2")
  • ma)`:启用多行模式和自动换行支持
  • ^|:匹配行首的竖线
  • (\w[\w\s.]+?):捕获参数名(支持字母、数字、空格、点号)
  • \s*=\s*:匹配等号前后的任意数量空格
  • (.*)$:捕获参数值直到行尾

步骤2:自动对齐等号

完成第一步后,需要通过代码计算最长参数名长度,实现等号对齐:

FormatInfobox(InputText) {
    ; 第一步:统一基础格式
    TempText := RegExReplace(InputText, "m`a)^|(\w[\w\s.]+?)\s*=\s*(.*)$", " | $1 = $2")
    
    ; 遍历所有行,找出最长的参数名长度
    MaxParamLength := 0
    Loop, Parse, TempText, `n, `r
    {
        if RegExMatch(A_LoopField, "^\s*\|\s*([\w\s.]+?)\s*=", , 1)
        {
            CleanedName := Trim($1)
            CurrentLength := StrLen(CleanedName)
            if CurrentLength > MaxParamLength
                MaxParamLength := CurrentLength
        }
    }
    
    ; 逐行格式化,对齐等号
    FinalText := ""
    Loop, Parse, TempText, `n, `r
    {
        if RegExMatch(A_LoopField, "^\s*\|\s*([\w\s.]+?)\s*=(.*)$", Match)
        {
            ParamName := Trim(Match1)
            ParamValue := Match2
            ; 计算需要补充的空格数
            SpaceCount := MaxParamLength - StrLen(ParamName)
            ; 拼接对齐后的行
            FormattedLine := " | " ParamName . StrRepeat(" ", SpaceCount) . " = " ParamValue
        }
        else
        {
            ; 保留非参数行(如模板开头、结尾)
            FormattedLine := A_LoopField
        }
        FinalText .= FormattedLine "`n"
    }
    
    return RTrim(FinalText, "`n")
}

; 辅助函数:生成重复的空格字符串
StrRepeat(Char, RepeatCount) {
    return StrReplace(StrRepeat("x", RepeatCount), "x", Char)
}

使用示例

将不规范的信息框代码传入函数:

{{Infobox XYZ
|first parameter=foo
|second_parameter= 
|3rd parameter=bar
|4th=bazzzzz
|5th= 
|etc.= 
}}

处理后得到规范格式:

{{Infobox XYZ
 | first parameter  = foo
 | second_parameter = 
 | 3rd parameter    = bar
 | 4th              = bazzzzz
 | 5th              = 
 | etc.             = 
}}

内容的提问来源于stack exchange,提问作者oli_vi_er

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:26:06