【发布时间】:2019-07-02 08:30:24
【问题描述】:
我到处搜索,但找不到具体的解决方案,文档也没有涵盖这一点。所以我想从这个字符串"1-Mar-2019 to 31-Mar-2019" 中提取开始日期和结束日期。问题是我无法提取两个日期字符串。
我在这里找到了最接近的解决方案,但由于声誉低,无法发表评论询问如何单独提取值:https://stackoverflow.com/a/8116229/10735227
我正在使用正则表达式模式来查找出现并首先将两个出现提取到 2 个字符串。
这是我尝试过的:
Pattern p = Pattern.compile("(\\d{1,2}-[a-zA-Z]{3}-\\d{4})");
Matcher m = p.matcher(str);
while(m.find())
{
startdt = m.group(1);
enddt = m.group(1); //I think this is wrong, don't know how to fix it
}
System.out.println("startdt: "+startdt+" enddt: "+enddt);
输出为:
startdt: 31-Mar-2019 enddt: 31-Mar-2019
此外,我需要使用 DateFormatter 将字符串转换为日期(如果需要,在单个数字日期之前添加尾随 0)。
【问题讨论】:
-
实际上,您可以使用代码提取两个日期。在 while 块中需要两次迭代。您的意思是“一次”使用 1 个正则表达式获得两者?
-
@WiktorStribiżew 或者最好完全没有 while 循环。
-
也许你可以做这样的事情 Pattern p = Pattern.compile("(\\d{1,2}-[a-zA-Z]{3}-\\d{4} ) 到 (\\d{1,2}-[a-zA-Z]{3}-\\d{4})");匹配器 m = p.matcher(str); while(m.find()) { startdt = m.group(1); enddt = m.group(2); }
-
@WiktorStribiżew 我的意思是将 2 个日期放入 2 个字符串中,无论是一次还是通过循环(如果需要)
-
我认为
s.split("\\s*to\\s*")可以。