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

使用正则表达式与VBScript修复格式错误的罗马数字

修复VBScript正则替换罗马数字为全大写的问题

你遇到的问题核心是VBScript正则替换的参数处理逻辑:当你直接用UCase("$1$2$3$4")作为替换内容时,UCase会先把字符串"$1$2$3$4"本身转大写(但这些符号大写后和原字符串完全一样),之后正则引擎才会替换捕获组的值,相当于把匹配到的罗马数字原样放回,所以结果和输入一致。

要解决这个问题,需要用自定义替换函数来处理每个匹配项的大写转换,而不是直接传字符串参数。以下是修改后的完整脚本:

Set re = New RegExp
re.Pattern = "\b(?=[MDCLXVI])(M{0,3})(C[DM]|D?C{0,3})(X[LC]|L?X{0,3})(I[VX]|V?I{0,3})\b"
re.IgnoreCase = True
re.Global = True

' 定义替换函数,接收匹配对象并返回大写后的内容
Function FixRomanCase(matchObj)
    FixRomanCase = UCase(matchObj.Value)
End Function

str = "some text Part I, some text Part Ii, some more text IiI, anything DXiV"
result = re.Replace(str, GetRef("FixRomanCase"))

' 输出结果:some text Part I, some text Part II, some more text III, anything DXIV
WScript.Echo result

关键说明:

  • GetRef("FixRomanCase")用于将自定义函数转换为正则替换可接收的函数引用
  • 替换函数FixRomanCase接收匹配对象matchObj,通过matchObj.Value获取当前匹配到的罗马数字文本,再用UCase转大写后返回
  • 你的正则表达式是正确的(替换为"xxx"能生效证明这一点),所以只需要调整替换逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:35:04