我使用的是VBScript正则表达式引擎。
我有两个正则表达式:
第一个用短划线替换非a-zA-Z0-9
个字符:
[^a-zA-Z0-9]|[-{2,}]
e.g。 ...this_string?
变为-this-string-
第二个从第一个替换中删除结果字符串开头和/或结尾的破折号:
^-+|-+$
e.g。 -this-string-
变为this-string
我现在已经完美地工作了,但是作为两个单独的(但嵌套的)正则表达式替换了调用。
r.replace("^-+|-+$", r.replace("[^a-zA-Z0-9]+|[-{2,}]+", o.Value, "-"), "")
有没有办法将这两者合并为一个正则表达式替换?
答案 0 :(得分:0)
这是一种不同的方法:
而不是尝试匹配非字母数字字符,如何匹配其余字符,然后将匹配数组与-
一起加入?
模式:
([A-Za-z0-9])
代码:
Console.WriteLine(string.Join("-",Regex.Matches("...this_string?", "([a-zA-Z0-9]+)").Cast<object>()));
抱歉:代码是C#,你可以把它翻译成VB!
答案 1 :(得分:0)
主要问题是您没有用单个字符串替换源字符串“有问题”的字符。您正在使用两种不同的替换(短划线或空字符串),具体取决于匹配的段所在的位置。
仅使用正则表达式替换操作的唯一方法是使用函数来处理替换。将为每个匹配调用此函数,并确定每个案例的正确替换
Option Explicit
Dim originalString
originalString = "...this___---is----a-----string?"
Dim convertedString
Function determineReplacement(matchString, position, sourceString)
If position = 0 Or (position + Len(matchString)) = Len(sourceString) Then
determineReplacement = ""
Else
determineReplacement = "-"
End If
End Function
With New RegExp
.Pattern = "[^a-zA-Z0-9]+"
.Global = True
.IgnoreCase = False
convertedString = .Replace(originalString,GetRef("determineReplacement"))
End With
WScript.Echo originalString
WScript.Echo convertedString