3 回答

TA貢獻1785條經驗 獲得超4個贊
您可以捕獲兩個日期,只需調用該find方法兩次,如果您只有一個,則只會捕獲第一個:
String str = "1-Mar-2019 to 31-Mar-2019";
String startdt = null, enddt = null;
Pattern p = Pattern.compile("(\\d{1,2}-[a-zA-Z]{3}-\\d{4})");
Matcher m = p.matcher(str);
if(m.find()) {
startdt = m.group(1);
if(m.find()) {
enddt = m.group(1);
}
}
System.out.println("startdt: "+startdt+" enddt: "+enddt);
while(m.find())請注意,這可以與 a和 a一起使用,List<String以便能夠提取您可以找到的每個日期。

TA貢獻1877條經驗 獲得超6個贊
如果您的文本可能很亂,并且您確實需要使用正則表達式來提取日期范圍,您可以使用
String str = "Text here 1-Mar-2019 to 31-Mar-2019 and tex there";
String startdt = "";
String enddt = "";
String date_rx = "\\d{1,2}-[a-zA-Z]{3}-\\d{4}";
Pattern p = Pattern.compile("(" + date_rx + ")\\s*to\\s*(" + date_rx + ")");
Matcher m = p.matcher(str);
if(m.find())
{
startdt = m.group(1);
enddt = m.group(2);
}
System.out.println("startdt: "+startdt+" enddt: "+enddt);
// => startdt: 1-Mar-2019 enddt: 31-Mar-2019
請參閱Java 演示
此外,請考慮此增強功能:將日期作為整個單詞進行匹配,以避免在較長的字符串中出現部分匹配:
Pattern.compile("\\b(" + date_rx + ")\\s*to\\s*(" + date_rx + ")\\b")
如果范圍可以用 表示-,或者to您可以用 替換to,(?:to|-)甚至(?:to|\\p{Pd})where\p{Pd}匹配任何連字符/破折號。

TA貢獻1827條經驗 獲得超4個贊
你可以簡單地使用String::split
String range = "1-Mar-2019 to 31-Mar-2019";
String dts [] = range.split(" ");
System.out.println(dts[0]);
System.out.println(dts[2]);
添加回答
舉報