在Excel单元格中调用regex

我想使用正则expression式匹配从单元格中提取string。 我找不到这样做的Excel函数,我也不是VBA专家。 我使用Excel 2007。

在Excel VBA代码编辑器中select工具/参考。 在选取器中检查最新版本的Microsoft VBScript Regular Expresions。

这里是一个简单的用户定义的函数,让你开始。 如果将它指向“foobar”或“fooooobar”单元格,它将返回“foo”。

Function RegExtract(contents As String) Dim regx As RegExp Set regx = New RegExp With regx .Pattern = "f[o]+" With .Execute(contents) If .Count Then RegExtract = .Item(0).Value End With End With End Function 

这里有一个函数,可以让你传入一个单元格,然后是任何正则expression式模式。 在你希望函数返回的模式部分周围使用()。

 Function RegexExtract(ByVal text As String, _ ByVal extract_what As String) As String Dim allMatches As Object Dim RE As Object Set RE = CreateObject("vbscript.regexp") RE.Pattern = extract_what RE.Global = True Set allMatches = RE.Execute(text) RegexExtract = allMatches.Item(0).submatches.Item(0) End Function 

Excel的VBA系统中有一个可用的库,称为Microsoft VBScript Regular Expressions。 一旦你从内部的VBA“IDE”中包含库,你可以创build一个简单的macros,接受你想要分析的任何值,并将结果返回给调用者(可以是来自单元的函数调用)。

安德鲁·科文霍文有个很好的答案。 添加正则expression式库很简单。 为了扩大这个答案一点,我会增加我所学到的获得项目内的匹配。

例如,我在一个单元格中有这样的string。

doubleclick.net/activityi;u=5f2256de37ab4992927b3a0a0a34f983;u13=;u14=27.34;u16=AUD;u9=;u10=;u11=;u12=;u5=;u6=;u7=;u8=;u1=Car;u2 = SEA; U3 = SEA; U4 = 20130923%20%7C%2020130926; ORD = 5360319407191.128?

我只需要几个部分来validation发送给Google的doubleclick标记是否正确。 使用上面显示的正则expression式,我有这样的东西。

 Function CheckU3(contents As String) Dim regx As RegExp Set regx = New RegExp Dim matches, s With regx .Pattern = "u3=(.*?);" .Global = False If regx.Test(contents) Then Set matches = regx.Execute(contents) For Each Var In matches.Item(0).SubMatches s = Var Next End If CheckU3 = s End With End Function 

我知道这可以简化很多,但重点是,我使用parans拉取submatches来获得我需要的东西。

在这里输入图像说明