如何在第一次出现多个字符串之一时提取目标字符串的最后一部分?

时间:2016-07-14 12:03:56

标签: regex string

我有很多字符串,第一个是

"The quick brown fox jumped over the lazy dog". 

我有一个关键字列表(在这种情况下相关的是"棕色"和#34;懒惰")。我正在尝试构建一个将通过目标字符串进行爬网的正则表达式,并且在关键字的第一个实例中,将返回字符串的其余部分。我创建了以下正则表达式:

.*?(?=(brown|lazy))

这提取了第一次出现,但由于某种原因,我无法弄清楚如何获得剩余的字符串(即"棕色狐狸跳过懒狗")而没有开始第二次出现。非常感谢这方面的建议。非常感谢

使用REGEX 5.5库在VBA中完成此操作

Function regexmatch(Myrange As Range) As String
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim strOutput As String

strPattern = ".*?(?=(brown|lazy))"

If strPattern <> "" Then
    strInput = Myrange.Value
    strReplace = ""

    With regEx
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .pattern = strPattern
    End With

    If regEx.test(strInput) Then
        regexmatch = regEx.replace(strInput, strReplace)
    Else
        regexmatch = ""
    End If
 End If
End Function

1 个答案:

答案 0 :(得分:0)

你可以做两件事,但实际上,我只是建议:

master.cells(x,1) = foo

然后你会得到:

Github Issue

注意:

  • 您只需要执行1次替换,因此,替换操作应该是单一的,strPattern = "^.*?(brown|lazy)" ... strReplace = "$1" ... With regEx .Global = False 必须是.Global
  • False使模式锚定在字符串start,它只匹配字符串的开头
  • 前瞻是多余的,您可以使用捕获组^并将整个匹配替换为(brown|lazy)反向引用,以取代捕获的值。