RegExp - 替换不匹配模式的字符串中的所有内容

时间:2017-08-24 18:36:47

标签: vba

我正在寻找一种方法来否定先前设置的匹配模式,以便提取两个字符之间的所有内容。

我在" / * comment * /"中的SQL代码中有以下代码匹配注释;格式。它将获取A列中的原始代码,然后剥离注释,将修剪后的字符串放在B列中:

Sub FindComments()

Dim xOutArr As Variant
Dim RegEx As Object
Dim xOutRg As Range
Dim SQLString As Variant
Dim i As Integer
Dim lr As Long

lr = Worksheets("Sheet1").Cells(Rows.count, "A").End(xlUp).Row
For i = 2 To lr
    SQLString = Worksheets("Sheet1").Cells(i, "A").Value
    Set RegEx = CreateObject("VBScript.RegExp")
    With RegEx
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = "(/\*(.*?)\*/)"
    End With

    If RegEx.test(SQLString) Then
        SQLString = RegEx.replace(SQLString, "")
    End If
    Set RegEx = Nothing

    xOutArr = VBA.Split(SQLString, ";")
    Set xOutRg = Worksheets("Sheet1").Range("B" & (Worksheets("Sheet1").Cells(Rows.count, "B").End(xlUp).Row + 1))
    xOutRg.Range("A1").Resize(UBound(xOutArr) + 1, 1) = Application.WorksheetFunction.Transpose(xOutArr)    

Next i

End Sub

上面的代码会找到介于" / *"之间的任何内容。和" * /"然后删除它,但我希望能够拉出两个字符之间的任何内容。我需要能够匹配不满足该模式的所有内容(或其他一些模式,如"< comment>")。这包括换行符等。这是专门针对VBA的,它需要能够在整个字符串中搜索该模式出现的任何和所有实例。我的目标是将内容放在这些字符之间(在模式中)到C列。

这会是什么RegExp模式?

SQLString的例子是:

1)/ *步骤1 * /从双重选择*;

2)/ *步骤2 * /从双重选择*; / *步骤3 * /从表

中选择*

我通过删除" / *步骤#* /"来捕获SQL代码。但我想捕捉这些评论中的内容(在C栏中)。 1)和2)是单行。 2)有多个查询。每一行都被";"分开。为了逐个运行查询。

1 个答案:

答案 0 :(得分:1)

您可以使用// Initial values of the strings. string variable1 = "Something", variable2 = "SomethingElse"; // New values for the strings. ** LEFT OF ASSIGNMENT OPERATOR WON'T COMPILE ** (variable1, variable2) = DoSomething(variable1, variable2); // Method to modify the initial strings. public List<string> DoSomething(string v1, string v2) { ...; return new List<string> { v1, v2 }; } 而不是使用Test来从匹配集合中的SQL:循环中获取所有匹配的字符串,将每个字符串存储在Col C中并使用Match将其删除来自原始的SQL:

Replace()