excel - 如何从字符串中提取日期?
问题描述
我正在尝试仅通过 excel 公式从字符串中提取日期。下面是我的数据样本
Only contains one date 01/05/2021 to this example
Project start date is 01/01/2021 and end date is 31/01/2021
There may multiple date like 1st 01/01/2021 2nd 01/06/2021 and 3rd 31/12/2021
我的计算机本地日期格式是dd/mm/yyyy
. 我试图通过FILTERXML()
公式来完成它。我尝试了下面的公式,也尝试了其他一些方法但失败了。
=TRANSPOSE(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s[translate(.,'dd/mm/yyyy','')!=.]"))
我的预期输出看起来像 -
解决方案
如果您想纯粹使用 xpath,那么您可以尝试通过dd/mm/yyyy
几个步骤来完全验证您的模式:1
=TRANSPOSE(TEXT(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s[substring(., 3, 1)= '/'][substring(., 6, 1)= '/'][string-length(translate(., '/' , '')) = 8][translate(., '/' , '')*0=0]"),"dd/mm/e"))
"<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>"
- 创建一个有效的 XML 结构。//s
- 选择 s 节点,其中:[substring(., 3, 1)= '/']
- 在第 3 个索引处有一个正斜杠;[substring(., 6, 1)= '/']
- 第 6 个索引处有一个正斜杠;[string-length(translate(., '/' , '')) = 8]
- 当我们替换正斜杠时,节点的剩余部分长度为 8。[translate(., '/' , '')*0=0]
- 当我们替换正斜杠时,节点的其余部分是数字。
不用说,如果您的字符串不包含任何其他正斜杠,但日期中的那些,您可以显着简化上述1:
=TRANSPOSE(TEXT(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s[contains(., '/')]"),"dd/mm/e"))
请注意,如果 Excel 将“dd/mm/yyyy”识别为日期,则简单使用的返回数组//s
将返回这些日期的等值数字。如果您的字符串中不存在其他数值,您可以使用 Microsoft365 功能1从中受益:
=LET(X,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"),TRANSPOSE(TEXT(FILTER(X,ISNUMBER(X)),"dd/mm/e")))
1:请注意,您也可以删除TEXT()
单元格的嵌套函数和数字格式dd/mm/e
。
推荐阅读
- python - 如何在 Tkinter Canvas 上配置动态创建的矩形?
- asp.net-mvc - Asp Net Mvc:可以从Partial View返回JSON数据吗?
- python - pandas 通过将列表中的每个元素与其他所有元素相乘来创建一个 DataFrame
- crystal-reports - Crystal Reports 在节中重复组标题
- visual-studio - Visual Studio SSRS 项目文件错误:该项目需要用户输入。重新加载项目以获取更多信息
- sql - 如何在 BigQuery(标准 SQL)中获取表的前 N%(例如,50%)?
- java - 正则表达式java:replaceAll空格,连字符之间除外
- javascript - Firebase:初始化由集合组成的树
- kubernetes - 如何跨多个 Kubernetes 集群扩展 RabbitMQ
- mysql - SQL查询从wordpress数据库中删除重复的postmeta