可以结合这两个正则表达式?

时间:2015-12-13 14:17:49

标签: regex vbscript

我使用的是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, "-"), "")

有没有办法将这两者合并为一个正则表达式替换?

2 个答案:

答案 0 :(得分:0)

这是一种不同的方法:

而不是尝试匹配非字母数字字符,如何匹配其余字符,然后将匹配数组与-一起加入?

模式:

  ([A-Za-z0-9])

代码:

Console.WriteLine(string.Join("-",Regex.Matches("...this_string?", "([a-zA-Z0-9]+)").Cast<object>()));

enter image description here

抱歉:代码是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