我正在寻找一种方法来否定先前设置的匹配模式,以便提取两个字符之间的所有内容。
我在" / * 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)有多个查询。每一行都被";"分开。为了逐个运行查询。
答案 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()