如何通过函数或自定义函数获得excel中的正则expression式支持?

似乎正则expression式(如在正则expression式中)不支持在Excel中,除了通过VBA。 这是如此,如果是的话,是否有任何支持正则expression式的“开源”自定义VBA函数。 在这种情况下,我正在寻找提取一个string内的复杂模式,但任何暴露在函数本身的正则expression式支持的自定义VBA函数的实现将是有用的。 如果你知道像IS函数这样的半相关函数,那么感觉要评论一下,尽pipe我真的在寻找一个通过函数公开的完整的正则expression式实现。 如果执行情况良好的话,甚至可以开始使用加载项。

另外,请注意,我在Windows 7上使用Office 2010; 添加此信息似乎是一个伟大的build议,而不是在Office 2010上工作的答案。

如果您有任何疑问,请发表评论。

没有内置到Excel中。 VBScript有内置的支持,可以从VBA调用。 更多信息在这里 。 您可以使用VBA中的后期绑定来调用该对象。 我已经包括了最近我放在一起的一些function。 请注意,这些都没有很好的testing,可能有一些错误,但它们非常简单。

这至less应该让你开始:

 '---------------------------------------------------------------------------------------vv ' Procedure : RegEx ' Author : Mike ' Date : 9/1/2010 ' Purpose : Perform a regular expression search on a string and return the first match ' or the null string if no matches are found. ' Usage : If Len(RegEx("\d{1,2}[/-]\d{1,2}[/-]\d{2,4}", txt)) = 0 Then MsgBox "No date in " & txt ' : TheDate = RegEx("\d{1,2}[/-]\d{1,2}[/-]\d{2,4}", txt) ' : CUSIP = Regex("[A-Za-z0-9]{8}[0-9]",txt) '--------------------------------------------------------------------------------------- '^^ Function RegEx(Pattern As String, TextToSearch As String) As String 'vv Dim RE As Object, REMatches As Object Set RE = CreateObject("vbscript.regexp") With RE .MultiLine = False .Global = False .IgnoreCase = False .Pattern = Pattern End With Set REMatches = RE.Execute(TextToSearch) If REMatches.Count > 0 Then RegEx = REMatches(0) Else RegEx = vbNullString End If End Function '^^ '--------------------------------------------------------------------------------------- ' Procedure : RegExReplace ' Author : Mike ' Date : 11/4/2010 ' Purpose : Attempts to replace text in the TextToSearch with text and back references ' from the ReplacePattern for any matches found using SearchPattern. ' Notes - If no matches are found, TextToSearch is returned unaltered. To get ' specific info from a string, use RegExExtract instead. ' Usage : ?RegExReplace("(.*)(\d{3})[\)\s.-](\d{3})[\s.-](\d{4})(.*)", "My phone # is 570.555.1234.", "$1($2)$3-$4$5") ' My phone # is (570)555-1234. '--------------------------------------------------------------------------------------- ' Function RegExReplace(SearchPattern As String, TextToSearch As String, ReplacePattern As String, _ Optional GlobalReplace As Boolean = True, _ Optional IgnoreCase As Boolean = False, _ Optional MultiLine As Boolean = False) As String Dim RE As Object Set RE = CreateObject("vbscript.regexp") With RE .MultiLine = MultiLine .Global = GlobalReplace .IgnoreCase = IgnoreCase .Pattern = SearchPattern End With RegExReplace = RE.Replace(TextToSearch, ReplacePattern) End Function '--------------------------------------------------------------------------------------- ' Procedure : RegExExtract ' Author : Mike ' Date : 11/4/2010 ' Purpose : Extracts specific information from a string. Returns empty string if not found. ' Usage : ?RegExExtract("(.*)(\d{3})[\)\s.-](\d{3})[\s.-](\d{4})(.*)", "My phone # is 570.555.1234.", "$2$3$4") ' 5705551234 ' ?RegExExtract("(.*)(\d{3})[\)\s.-](\d{3})[\s.-](\d{4})(.*)", "My name is Mike.", "$2$3$4") ' ' ?RegExReplace("(.*)(\d{3})[\)\s.-](\d{3})[\s.-](\d{4})(.*)", "My name is Mike.", "$2$3$4") ' My name is Mike. '--------------------------------------------------------------------------------------- ' Function RegExExtract(SearchPattern As String, TextToSearch As String, PatternToExtract As String, _ Optional GlobalReplace As Boolean = True, _ Optional IgnoreCase As Boolean = False, _ Optional MultiLine As Boolean = False) As String Dim MatchFound As Boolean MatchFound = Len(RegEx(SearchPattern, TextToSearch)) > 0 If MatchFound Then RegExExtract = RegExReplace(SearchPattern, TextToSearch, PatternToExtract, _ GlobalReplace, IgnoreCase, MultiLine) Else RegExExtract = vbNullString End If End Function 

这里有一篇关于Excel正则expression式的文章:

http://mathfest.blogspot.com/2010/03/regular-expressions-in-excel.html

希望能帮助到你。

另一个使用Python和IronSpread

http://mathfest.blogspot.ca/2012/06/using-ironspread-and-regular.html

OpenOffice / LibreOffice Calc中包含正则expression式在函数中的使用。 要激活转到工具>选项>计算> Calulate:Y =在公式中启用正则expression式。 我用了很多次

我已经尝试了几个解决scheme,并且由于缺乏VBA方面的专业知识,我发现其中大多数对我来说太麻烦了。 我发现的最简单的是SeoTools for Excel( http://nielsbosma.se/projects/seotools/ )。 为我工作就像一个魅力。

—二零一四年二月

只是为了提供一个替代scheme, Open Office和Libre Office Calc软件(它们的电子表格软件名称)允许在其searchfunction中使用正则expression式。

我最近有同样的确切的问题,经过努力创build自己的工具,使他们正常工作,我发现了一个很好的在线ADDIN,很容易使用。

这是创作者的摘录

对于我在过去几个月的实习,我一直在营销科学部门工作,部分工作是将数据导入MS Access并生成报告。 这涉及到从各种数据源获取潜在客户名单。 这通常是一个相当简单的壮举,涉及一些基本的SQL查询。 但是,有时候,我把这些地址这样的数据传给了IT所使用的任何标准格式。 在最坏的情况下,数据是以PDF格式提供的,这意味着我只能将其导出到非分隔的文本文件中。 我发现我真的需要一些通用的正则expression式函数来parsing出导入到MS Access的字段。 我在网上find了一些.xla的例子,但是我真的想要一个更容易使用,更广泛,更便携的库。 我也想包括几个基本的模式,所以没有必要每次重新发明轮子。

所以,我创build了一个简单的Excel插件正则expression式xla,它添加了几个自定义函数来实现标准的VBScript正则expression式。

这是网站

我用它成功地使用正则expression式提取有用的文本。