有没有一种方法可以使此Regex表达式不那么贪婪。使用Excel VBA

时间:2019-03-26 23:54:54

标签: regex excel vba

我有一个带有单元格的excel文档,其中包含以下信息:

A) Current to: Notice of 19 June 2014  Sent on: August 2012
B) Updated on: October 2018
C) Updated: 14 January 2009

我使用以下正则表达式取得了一些成功:

(\b\d{1,2}\D{0,3})?\b((?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(?:Nov|Dec)(?:ember)?))\D?(\d{1,2}\D?)?\D?((19[7-9]\d|20\d{2})|\d{2})

我的输出如下:

A) 19 June2014August2012
B) October 2018
C) 14 January 2009

B和C可以很好地提取,但是我希望A的2014年6月19日

我尝试添加。*?使表达式不那么贪婪,但是(取决于我在何处添加点星),我要么没有结果,要么得到了一个不准确的答案

1 个答案:

答案 0 :(得分:2)

要匹配一行上的第一个匹配项,您可以在模式的开头添加^.*?,将捕获的括号括起来,然后将Multiline regex属性设置为True。您的比赛在match.Submatches(0)内部。

regEx.Pattern = "^.*?((?:\b\d{1,2}\D{0,3})?\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|(?:Nov|Dec)(?:ember)?)\D?(?:\d{1,2}\D?)?\D?(?:(?:19[7-9]\d|20\d{2})|\d{2}))"
regEx.Multiline = True

请参见regex demo