正则表达式使用VBScript查找可变长度字符串并替换为相同长度的空格字符串

时间:2014-06-05 00:38:23

标签: regex string replace vbscript

希望获得有关VBScript中正则表达式替换代码的帮助,该代码与找到的字符串的长度相匹配。在网络上发现了很多变化,但我的技能水平并不广泛,所以理解它们是漫长而令人沮丧的。也许我使用了错误的工具,不再确定了。

挑战是调整固定长度文件中的字段,该文件未针对收件人正确格式化。有一个字段包含可变长度,短划线和更多文本的文本。可变长度字符串和短划线需要用空格替换。这将保持在固定宽度文件中的定位。

我整理的正则表达式是: strOriginal =" \ b([A-Z0-9] {2,4} [ - ])"

这适用于数据文件匹配。专家可以指导我正确更换吗?

谢谢你, 德鲁

1 个答案:

答案 0 :(得分:1)

您需要为正则表达式使用替换函数

Option Explicit

Function replaceFunction(matchString, position, fullString)
    replaceFunction = Space(Len(matchString))
End Function 

Dim originalString
    originalString = "W 121ST ST 3A8-2B"

Dim changedString

    With New RegExp
        .Global = True
        .Pattern = "\b[A-Z0-9]{2,4}-"
        changedString = .Replace( originalString, GetRef("replaceFunction") )
    End With

    WScript.Echo "[" & originalString & "]" 
    WScript.Echo "[" & changedString & "]"

函数参数是与正则表达式中的模式匹配的字符串部分,输入字符串中找到匹配项的位置以及正在处理的完整字符串。

在您的情况下,对于每个匹配,调用该函数并返回一个空格字符串,其长度与匹配的字符串相同。

已编辑以适应评论

Option Explicit

Function replaceFunction(matchString, prefix, toSpaces, position, fullString)
    replaceFunction = prefix & Space(Len(toSpaces))
End Function 

Dim originalString
    originalString = "W 121ST ST 3A8-2B" & vbCRLF & "W 12-ST ST 3A8-2B"

Dim changedString

    With New RegExp
        .Global = True
        .Multiline = True
        .Pattern = "^(.{10,}\b)([A-Z0-9]{2,4}-)"
        changedString = .Replace( originalString, GetRef("replaceFunction") )
    End With

    WScript.Echo  originalString 
    WScript.Echo  changedString 

现在它处理多行输入,并且对于每一行,它搜索前10个(或更多)字符,然后搜索要用空格替换的字符串。正则表达式定义两个捕获组,这些捕获组作为参数传递给replace函数。此函数将返回第一个捕获组(前缀),后跟适当数量的空格以替换不需要的字符串。