Regex 正则表达式-捕获“之间的字符串”;及;然后以8位数字结尾

Regex 正则表达式-捕获“之间的字符串”;及;然后以8位数字结尾,regex,excel,vba,Regex,Excel,Vba,我正在使用excelvba 我应该使用什么语法来查找双引号(不包括引号)之间的字母数字字符串,该字符串也以8个数字结尾,后跟.xml 我认为数字和xml是由\d{8}(.xml)捕获的,但我不知道如何捕获指向八个数字的所有字符 这里有一个示例字符串:“flws-20130929.xml” 还有一个:“aegy.ob-20120731.xml” 感谢您的帮助。这里有一个快速版本,它只使用LIKE运算符,而不使用VBScript Regexp对象 请尝试以下操作: s = "flws-2013092

我正在使用excelvba

我应该使用什么语法来查找双引号(不包括引号)之间的字母数字字符串,该字符串也以8个数字结尾,后跟.xml

我认为数字和xml是由\d{8}(.xml)捕获的,但我不知道如何捕获指向八个数字的所有字符

这里有一个示例字符串:“flws-20130929.xml” 还有一个:“aegy.ob-20120731.xml”


感谢您的帮助。

这里有一个快速版本,它只使用LIKE运算符,而不使用VBScript Regexp对象

请尝试以下操作:

s = "flws-20130929.xml"

If s Like "*########.xml" Then Msgbox "Yes"
你会看到它确实返回yes

如果您确实有双引号并希望排除它们:

s = """flws-20130929.xml"""
If s Like """*########.xml""" Then MsgBox Mid(s, 2, Len(s) - 2)
使用VBScript Regex 55

Sub GetLink()

Dim RegEx As Object
Set RegEx = New RegExp

Dim MatchCol As MatchCollection

With RegEx
    .Pattern = """([a-zA-Z.-]*[0-9]{8}.xml)"""
    .Global = True ' This parameter is very important or you will only get the first match within the tested string.
End With


' You would be getting that from the webpage, here I created a dummy
s = "<a href=""flws-20130929.xml""></a><p>A paragraph here with another link><a href=""flws-20120717.xml""></a></p>"
Debug.Print s ' (need the Immediate Window to see what it gives, CTRL + G)

Debug.Print RegEx.Test(s)

' Store the results in a collection of matches
Set MatchCol = RegEx.Execute(s)


If MatchCol.Count = 0 Then

    Debug.Print "No Match found"

Else

    For Each Match In MatchCol

        Debug.Print "source >>", Match.Value

        ' Showing you the submatches here. This is within the pattern, what is between parenthesis. Here you only have one anyway...
        For j = 0 To Match.SubMatches.Count - 1

            Debug.Print "[$" & j + 1 & "]", Match.SubMatches(j)

        Next j

    Next Match

End If


End Sub

你只是在测试一个匹配,还是从一个更大的字符串中提取出来?我是从一个网页的主体中提取出来的。下面是一个例子:。有几个文件的扩展名是.xml,但只有一个文件的扩展名是8位数字(即日期),然后是.xml。我需要将文件名附加到页面路径,以便应用其他代码搜索该文件中的项目。所以现在这只是我需要的完整文件名谢谢Julien。我不明白我将如何应用这一点来搜索网页的主体,所以我不能确认它在我的情况下工作。请注意,我的html经验有限。使用RegEx,我设置了一个object=RE.Execute(IEbrowser,Document.body.innerhtml),并为RE提供了搜索模式。如果您有任何关于使用VBA搜索html的想法,我们将不胜感激。我想,如果我只是迭代设置s=各种字符串,那么使用Like就可以了。那么,你愿意我给你一个正则表达式模式吗?如果你知道什么可以工作,是的。在我最初的博文中,我并没有详细说明搜索网页的细节,因为我认为这是无关紧要的。我很抱歉。如果我有一个RE模式,我可以将它插入到我现有的例程中进行测试。谢谢,实际上你离这里很近。你想捕捉一个模式,它以双引号开始,有一堆东西,显然是一个“-”(也许不总是这样?),然后是八个数字。您需要将双引号加倍,您可能可以将*用于“bunch”内容,[0-9]{8}或\d{8}就可以了。试试看,如果你需要我会帮你的。我得走了,所以如果你需要的话,我在下面发布了解决方案。我的意思是像一个小教程一样,并在下面发布了您在玩子匹配时应该实际使用的。pattern=“”([a-zA-Z]*-[0-9]{8}.xml)”“找不到适合我的匹配项。”。pattern=“([a-zA-Z]*-[0-9]{8}.xml)”确实有效;但是,它仅适用于此表单“flws-20130929.xml”的字符串,而不适用于此表单“aegy.ob-20120731.xml”的字符串。我将发布我用来测试的代码。(?很好,干得好!我没有看到数字前面的不定字符串中有“.”,对不起:)谢谢JM。这个搜索似乎很有效,但是它不能100%保证只捕获我想要的字符串,因为它不是从“开始”开始的,而是从“开始”之后的字符开始。我依靠的是“仅是字母数字”和“-”之后的字符。但是如果你能建议一种更铁的搜索模式,从“开始”开始“我将不胜感激。注意,我在Excel VBA中,所以lookbehinds不起作用。如果它们都在您的计算机中,您可以提取“”或类似内容之后的内容?
For Each Match In MatchCol
    Debug.print Match.SubMatches(0)
Next Match