希望在VBScript中找到与找到的字符串长度匹配的正则表达式替换代码的帮助。有相当多的变化在网上发现,但我的技能水平不是很广泛,所以弄清楚他们是一个长期和令人沮丧的。也许我用错了工具,不确定了。
挑战是调整固定长度文件中的字段,该字段没有为收件人正确格式化。有一个字段包含可变长度的文本、破折号和更多的文本。可变长度字符串和破折号都需要用空格替换。这将保持在固定宽度文件中的定位。
我得出的结果是: strOriginal =“b(A-Z0-9{2,4}-)”
这对于数据文件匹配是很好的。专家能指导我做正确的替换吗?
谢谢你,德鲁
发布于 2014-06-05 07:03:00
您需要为正则表达式使用替换函数。
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个(或更多)字符,然后用空格替换字符串。正则表达式定义两个捕获组,它们作为参数传递给替换函数。该函数将返回第一个捕获组(前缀),后面是替换不需要的字符串的相应空格数。
https://stackoverflow.com/questions/24049845
复制相似问题