【发布时间】:2015-05-26 06:02:10
【问题描述】:
我正在尝试在 VB 脚本中编写一个正则表达式来替换一些模式。
我的字符串可能包含零个或多个以下模式 -
&USERID
&USERID
&USERID.
&USERID.
&USERID(n)
&USERID(n)
&USERID(n).
&USERID(n).
&USERID(n1, n2)
&USERID(n1, n2)
&USERID(n1, n2).
&USERID(n1, n2).
示例字符串 -
C:\temp\&USERID_&USERID._&USERID(4)_&USERID(2,2)..txt
如果 USERID=ABCDEF,则替换后的结果字符串应如下所示 -
C:\temp\ABCDEF_ABCDEF_ABCD_BC.txt
括号中的数字表示要替换的字符数。可以使用逗号分隔的数字指定范围。为了实现这一点,我写了一个正则表达式如下 -
"((&USERID\(\d+,\d+\)\.)|(&USERID\(\d+,\d+\)\.)|(&USERID\(\d+,\d+\))|(&USERID\(\d+,\d+\)))|((&USERID\(\d\)\.)|(&USERID\(\d\)\.)|(&USERID\(\d\))|(&USERID\(\d\))|(&USERID\.)|(&USERID\.))"
使用 VBScript.RegExp 我匹配模式并获得匹配的集合。遍历每个匹配对象,我根据下标替换完整的 USERID 或其中的一部分。
正则表达式工作正常。但与字符串操作函数相比,它非常慢。
上面的模式可以优化吗?
更新:
我接受了解决我的一个问题的答案。基于正则表达式,我尝试解决另一个查找和替换问题如下 -
我有以下模式
DATE
DATE(MMDDYYYY)
DATE(DDMMYYYY)
DATE(YYYYMMDD)
DATE(YYYY)
DATE(MM)
DATE(DD)
DATE(DDMONYYYY)
DATE(MON)
DATE(MONTH)
DATE(YYDDD)
DATE(YYYYDDD)
它可能有一个终止“。”最后。
Function replaceDate(matchString, label, position, sourceString)
If label = "MMDDYYYY" or label = "" then
replaceDate = "<MMDDYYYY>"
ElseIf label = "DDMMYYYY" then
replaceDate = "<DDMMYYYY>"
ElseIf label = "YYYYMMDD" then
replaceDate = "<YYYYMMDD>"
ElseIf label = "YYYY" then
replaceDate = "<YYYY>"
ElseIf label = "MM" then
replaceDate = "<MM>"
ElseIf label = "DD" then
replaceDate = "<DD>"
ElseIf label = "DDMONYYYY" then
replaceDate = "<DDMONYYYY>"
ElseIf label = "MON" then
replaceDate = "<MON>"
ElseIf label = "MONTH" then
replaceDate = "<MONTH>"
ElseIf label = "YYDD" then
replaceDate = "<YYYYDDD>"
Else
replaceDate = ""
end if
End Function
With new RegExp
.Global = True
.IgnoreCase = False
.Pattern = "(?:&(?:amp;)?)?DATE(?:\((MMDDYYYY|DDMMYYYY|YYYYMMDD|YYYY|MM|DD|DDMONYYYY|MON|MONTH|YYDDD|YYYYDDD)?\))?\.?"
strTempValue = .Replace(strTempValue, GetRef("replaceDate"))
End with
【问题讨论】:
标签: regex vbscript expression