如何在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匹配的匹配,只留下最后一个匹配。
这里是一个很好的指导: