在某些文本中查找时间,允许多种格式

时间:2017-01-03 16:50:02

标签: google-sheets

我有以下公式。 = INDEX(查找$ L $ 1:$ L $ 726 MAX(IF(ISERROR(FIND(查找$ L $ 1:!!!$ L $ 726 $ A1)), - 1,1)*(ROW(查找$ L $ 1 :$ 726 $大号)-ROW(查找$ L $ 1)+1)))

这个想法是从电子邮件中获取某个项目的时间(已经解析为google表格)。电子邮件有各种格式,因此我无法在文本字符串中指定具体位置。

时间并不总是以传统的时间格式编写,因此从公式中可以看出我有726种可能性。例如,有时候时间可以写成13:15,其他时间可以写成1:15甚至1.15或1-15等等。

我遇到的问题是上面的公式似乎从可能的最小字符串开始并且“向上”工作,因此从电子邮件字符串中提取3:15而不是13:15的全时字符串。有没有办法我可以修改公式来搜索最长的字符串,在那个例子中寻找13:15,然后只搜索3:15如果找不到前一个字符串。

希望这是有道理的。提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

一种方法是对726种可能性进行重新排序,以便首先获得较长的可能性。您可以通过使用=len(L1)创建另一列,将该公式复制下来,并按此新列按降序排序范围来实现。

但是使用regexextract会更容易,因为正则表达式旨在解决您所面临的问题。例如,

=regexextract(L1, "\b\d{1,2}[:.-]\d{1,2}\b")

获取所有变种1:15,13:15,1-15或13.15。 (它查找以下序列:单词边界,1-2个数字,一个字符:,。, - ,然后1-2个数字,和另一个单词边界。)匹配是贪婪的,所以它会找到13:15时它在那里,而不仅仅是3:15。

更复杂的表格

=regexextract(L1, "(?i)\b\d{1,2}[:.-]\d{1,2} ?(?:am|pm)?\b")

也支持" am"或" pm"在时间之后,不区分大小写,并且可能与数字之间的空格分隔。

这可以进一步细化,例如小时部分将更精确地表示为[0-2]?\d而不是\d{1,2},而分钟部分则表示为[0-6]?\d