Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在excel中提取文本字符串中的最后日期和时间_Regex_Excel - Fatal编程技术网

Regex 如何在excel中提取文本字符串中的最后日期和时间

Regex 如何在excel中提取文本字符串中的最后日期和时间,regex,excel,Regex,Excel,我遇到了一个问题,我试图找出如何在excel电子表格上以字符串形式提取最后一次通信的日期和时间。 每个单元格中的每个通信都以“附加信息”开头,然后是时间戳,时间戳以“CET”结尾,如下所示(请注意,我已将正文文本替换为废话,废话,废话): 示例单元格: Additional information 4/15/15 4:29 PM CET Ronald Ben As per phone conversation Blah, blah, blah, blah, blah, blah,

我遇到了一个问题,我试图找出如何在excel电子表格上以字符串形式提取最后一次通信的日期和时间。
每个单元格中的每个通信都以“附加信息”开头,然后是时间戳,时间戳以“CET”结尾,如下所示(请注意,我已将正文文本替换为废话,废话,废话):

示例单元格:

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
文本字符串的长度因单元格而异,但每个单元格的结构完全相同

在上述示例中,最后一个时间戳应输出为4/10/15 10:46 PM

我尝试使用RegexExtract函数,但由于某些原因,它不起作用


任何帮助都将不胜感激。

以下是关于如何在excel上使用regex的指南:

以及模式:

\d+\/\d+\/\d+\s\d+:\d+\s[A|P]M(?!.*(?:\d+\/\d+\/\d+\s\d+:\d+\s[A|P]M))
如果你的引擎支持向前看,我会做这项工作

在Regexr.com上测试:

说明:

第一部分:

\d+\/\d+\/\d+\s\d+:\d+\s[A|P]M
基本上是你用来查找日期的正则表达式

以及先行条款:

(?!.*(?:\d+\/\d+\/\d+\s\d+:\d+\s[A|P]M))
丢弃前面有另一个日期匹配的匹配,只留下最后一个

这是一本关于环顾四周的优秀指南:


InStrRev
将为您提供上一次CET的位置
从那一点往回走20分钟应该会给你时间

MyStr=range(“A1”)
Pos=仪表(MyStr,“CET”)
'您可能需要调整位置值(此处为20和12)
LastDate=DateValue(Mid(MyStr,Pos-20))
LastTime=时间值(Mid(MyStr,位置12))

如果每个条目都以静态文本开头,我不确定正则表达式是否是最好的解决方案,因为日期/时间字符串可以很容易地找到并剥离出来。
CDate
功能将在一个笔划中转换日期和时间部分

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

虽然RegEx可能是一个很好的解决方案,用于更动态的文本输入,但在这里不需要它。

这在我尝试时效果很好,但后来意识到我对问题的看法不正确。我还有其他的应用程序,我也可以使用它。谢谢你的帮助!!我尝试过这个函数,但由于某种原因,即使在我将值调整到正确的值时,我仍然会出现调试错误。嘿,伙计们,我意识到我搞砸了,这实际上比我想象的要简单,但你们仍然帮了我很多忙。最后一个对应实际上在字符串的开头,但由于某种原因,我看不清楚。