希望获得有关VBScript中正则表达式替换代码的帮助,该代码与找到的字符串的长度相匹配。在网络上发现了很多变化,但我的技能水平并不广泛,所以理解它们是漫长而令人沮丧的。也许我使用了错误的工具,不再确定了。
挑战是调整固定长度文件中的字段,该文件未针对收件人正确格式化。有一个字段包含可变长度,短划线和更多文本的文本。可变长度字符串和短划线需要用空格替换。这将保持在固定宽度文件中的定位。
我整理的正则表达式是: strOriginal =" \ b([A-Z0-9] {2,4} [ - ])"
这适用于数据文件匹配。专家可以指导我正确更换吗?
谢谢你, 德鲁
答案 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函数。此函数将返回第一个捕获组(前缀),后跟适当数量的空格以替换不需要的字符串。