簡體   English   中英

從Java文本中提取日期

[英]Extracting dates from text in Java

是否可以從Java中的字符串中提取日期?

我有500多個帶有不同數據的字符串。 在它們中可以有:
“ ...時期從08.23.2011-09.05.2011 ...”
並且:
“ ...期於2011年9月9日結束...”。

不確定上面的字符串是否存在,但是可以。

是否可以提取3個日期並以Date格式獲取它們?

實質上,正則表達式是識別的答案,但是表達日期和時間段的方法有很多 ,因此,如果您想要一個好的解決方案,則可能希望使用一組現有的調整良好的正則表達式。 然后是第二個解釋階段,它需要比JodaTime開箱即用解析的靈活性更大的靈活性。 因此,對於強大的解決方案,您可能想要使用自然語言處理社區中構建的系統之一,例如SUTimeHeidelTimeGUTime

您可以先使用正則表達式提取它們: \\d{2}\\.\\d{2}\\.\\d{4} ,然后使用SimpleDateFormat解析每個匹配項new SimpleDateFormat("dd.MM.yyyy").parse(dateString)

我將使用一個簡單的正則表達式首先“確定”日期,然后更仔細地解析它們(最好是與IMO的Joda Time一起使用)。 我將從\\b\\d{2}\\.\\d{2}\\.\\d{4}\\b的正則表達式開始(當然還要轉義Java字符串)。

\\b位匹配單詞邊界,因此12345.45.12345不匹配。)

當然,您可以使您的正則表達式更具選擇性,但是要使其進行所需的所有驗證(想象在正則表達式中嘗試對leap年的所有規則進行編碼)將非常困難-因此,如果您需要無論如何在進行解析時進行驗證,使正則表達式變得復雜沒有太多意義。

您的意思是String而不是文本(這是Java)

創建一個String對象來表示文本,然后將其解析為新的DateFormat類

SimpleDateFormat = new SimpleDateFormat("dd.MM.yyyy").parse(yourString)

日期模式識別算法不僅可以識別日期模式,還可以以Java日期格式獲取可能的日期。 該算法非常快速且輕巧。 處理時間是線性的,所有日期都可以通過一次識別。 算法使用樹遍歷機制解析日期。 樹數據結構是自定義創建的,以構建受支持的日期,時間和月份模式。

該算法還在Date文字之間確認多個空格字符。 例如DD DD DD和DD DD DD被視為有效日期。

以下日期模式被認為是有效的,並且使用此算法可識別。

dd MM(MM)yy(yy)yy(yy)MM(MM)dd MM(MM)dd yy(yy)

M是月份文字的地方是字母格式,例如Jan或January

日期之間允許的定界符是'/','\\',',',','|','-',''

它還以以下格式識別尾隨時間模式:hh(24):mm:ss.SSS am / pm hh(24):mm:ss am / pm hh(24):mm:ss am / pm

解析時間是線性的,不使用模式匹配或蠻力。 該算法基於樹遍歷並返回具有以下三個組成部分的日期列表-文本中標識的日期字符串-轉換並格式化的日期字符串-SimpleDateFormat

使用日期字符串和格式字符串,用戶可以根據自己的要求自由地將字符串轉換為對象。

該算法庫可在maven Central中獲得。

<dependency>
    <groupId>net.rationalminds</groupId>
    <artifactId>DateParser</artifactId>
    <version>0.3.0</version>
</dependency>

下面是使用此示例代碼。

 import java.util.List;  
 import net.rationalminds.LocalDateModel;  
 import net.rationalminds.Parser;  
 public class Test {  
   public static void main(String[] args) throws Exception {  
        Parser parser=new Parser();  
        List<LocalDateModel> dates=parser.parse("Identified date :'2015-January-10 18:00:01.704', converted");  
        System.out.println(dates);  
   }  
 }  

輸出:[LocalDateModel {originalText = 2015-january-10 18:00:01.704,dateTimeString = 2015-1-10 18:00:01.704,conDateFormat = yyyy-MM-dd HH:mm:ss.SSS,start = 18, end = 46}]

詳細博客, 網址http://coffeefromme.blogspot.com/2015/10/how-to-extract-date-object-from-given.html

完整的源代碼可以在GitHub上找到, 網址https://github.com/vbhavsingh/DateParser

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM