如何在excel中的string中提取最后的date和时间

我有一个问题,我想弄清楚如何可以提取Excel电子表格中的文本string中的最后一个通信的date和时间。
每个单元格内的每个对应关系都以“附加信息”开始,然后是时间戳,然后以“CET”结尾,如下所示(请注意,我已经用Blah,blah,blahreplace了正文):

示例单元格:

Additional information 4/15/15 4:29 PM CET Ronald Ben As per phone conversation Blah, blah, blah, blah, blah, blah, blah Thank you --------------------------- Additional information 4/15/15 3:31 PM CET Ben I inspected Blah, blah,blah, blah, blah, blah, blah, blah, blah, blah, blah --------------------------- Additional information 4/13/15 8:02 PM CET Michael Hi Craig As per Blah, blah,blah, blah, blah, blah, blah --------------------------- Additional information 4/13/15 7:19 PM CET Craig Hello Michael, Blah, blah,blah --------------------------- Additional information 4/13/15 2:42 PM CET Blah, blah,blah --------------------------- Additional information 4/10/15 10:46 PM CET Mark Hello Craig, Blah, blah,blah 

文本string的长度因单元而异,但是每个单元的结构都完全相同。

在上面的例子中,最后的时间戳应该是4/10/15 10:46 PM输出。

我试图使用RegexExtract函数,但由于某种原因,它不工作。

任何帮助,将不胜感激。

我不知道RegEx是最好的解决scheme,如果您有静态文本开始每个条目作为date/时间string可以很容易find和剥离。 CDate函数将一次性转换date和时间部分。

 myDateTime = CDate(Mid(Range("A1").Value2, 23, 21)) 

虽然正则expression式可以为更dynamic的文本input提供一个很好的解决scheme,但在这里并不是必须的。

InStrRev会给你最后一个CET的位置
从这一点回来20应该给你的时间

 MyStr=range("A1") Pos=InStrRev(MyStr,"CET") 'You may need to play around with the position values (20 & 12 here) LastDate=DateValue(Mid(MyStr,Pos-20)) LastTime=TimeValue(Mid(MyStr,Pos-12)) 

这里是如何在Excel中使用正则expression式的指南:

https://stackoverflow.com/a/22542835/3393095

而模式:

 \d+\/\d+\/\d+\s\d+:\d+\s[A|P]M(?!.*(?:\d+\/\d+\/\d+\s\d+:\d+\s[A|P]M)) 

如果你的引擎支持lookahead,将会做这项工作。

经Regexr.comtesting:

在这里输入图像说明

说明:

第一部分:

 \d+\/\d+\/\d+\s\d+:\d+\s[A|P]M 

基本上你是finddate的正则expression式。

和前瞻性条款:

 (?!.*(?:\d+\/\d+\/\d+\s\d+:\d+\s[A|P]M)) 

丢弃在它前面的另一个date匹配的匹配,只留下最后一个匹配。

这里是一个很好的指导:

http://www.rexegg.com/regex-disambiguation.html