2017-01-03 68 views
0

我有以下公式。 = INDEX(查找$ L $ 1:$ L $ 726 MAX(IF(ISERROR(FIND(查找$ L $ 1:!!!$ L $ 726 $ A1)), - 1,1)*(ROW(查找$ L $ 1:$ L $ 726)-ROW(Lookups!$ L $ 1)+1)))在某些文本中查找時間,允許多種格式

這個想法是從電子郵件中獲取某個項目的時間(已解析爲Google表格)。電子郵件有各種格式,所以我無法在文本字符串中指定具體查看的位置。

時間並非總是以傳統的時間格式書寫,所以從公式中可以看出我有726種可能性。例如,有時時間可以寫成13:15,其他時間可以寫成1:15甚至1.15或1-15等。

我遇到的問題是上面的公式似乎以最小的字符串開始並且「向上」工作,因此從電子郵件字符串中選擇3:15而不是全時間字符串,它是13:15。有沒有一種方法可以修改公式,以便先搜索最長的字符串,在該示例中查找13:15,然後只搜索3:15如果未找到先驗字符串。

希望是有道理的。預先感謝您的幫助。

回答

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") 

還支持「上午」或「下午」的時間之後,不區分大小寫和可能通過從數字的空間隔開。

這可以進一步細化,例如小時部分將更精確地陳述爲[0-2]?\d而不是\d{1,2},分鐘部分爲[0-6]?\d

+0

這是完美的。謝謝zaq。 – Stuart