2011-03-11 48 views
4

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

我有500+字符串與不同的數據。其中可以有:
「... 2011年8月23日 - 2011年9月5日...」
還有:
「...期間結束2011年9月9日...」。

上述字符串不存在,但它們可以是。

是否可以提取3個日期,並獲得他們在日期格式?

+0

你最好的選擇可能是正則表達式,就像Bozho說: – 2011-03-11 07:38:22

回答

3

你可以用正則表達式第一提取出來:\d{2}\.\d{2}\.\d{4},然後分析每場比賽有SimpleDateFormat - new SimpleDateFormat("dd.MM.yyyy").parse(dateString)

+0

威爾有可能具有「鍵碼字」: 「REGEX - REGEX期間」和「期間結束REGEX」 作爲安全檢查,它是我正在提取的正確日期? – user649542 2011-03-11 07:47:40

+0

@ user649542是的,正則表達式允許。 – Bozho 2011-03-11 07:55:44

+0

謝謝。這就是訣竅:) – user649542 2011-03-11 08:16:00

1

我會用一個簡單正則表達式來得到「可能」日期先出來,然後更仔細地解析他們(理想情況下與Joda Time,國際海事組織)。我將以\b\d{2}\.\d{2}\.\d{4}\b的正則表達式開始(當然還有轉義Java字符串)。

(該\b位字邊界一致,所以12345.45.12345將不匹配。)

你可以讓你的正則表達式更具有選擇性,當然,但它是非常讓它做全部需要驗證(試想在正則表達式中對所有閏年規則進行編碼) - 因此,如果您無論如何都需要驗證,那麼使正則表達式變得複雜並沒有多大意義。

0

你的意思String,而不是文本(這就是Java)

創建一個String對象來表示文字,然後將其解析到一個新的DateFormat class

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

本質上的正則表達式是答案但有很多很多的方式來表示日期和時間段,所以如果你想要一個好的解決方案,你可能想要使用現有的調整良好的正則表達式。接下來是解釋的第二階段,它需要比JodaTime解析開箱即用更多的靈活性。因此,對於一個強大的解決方案,您可能需要使用自然語言處理社區中構建的系統之一,如SUTime,HeidelTimeGUTime

+0

那些不是英文的東西呢? – dranxo 2013-06-21 08:51:50

+0

你的選擇更糟......最好的是HeidelTime,它支持多種語言,包括德語和西班牙語。我的學生Gabor Angeli即將發表[關於多種語言學習方法的論文](http://acl2013.org/site/accepted/502.html)...但代碼不可能變得可用... 。 – 2013-06-21 18:56:24

+0

謝謝。搜索後我除了HeidelTime之外沒有發現太多東西。如果你/ Gabor想要點你可以在這裏回答:http://stackoverflow.com/questions/17241917/is-there-a-multilingual-temporal-expression-tagger-that-c​​an-run-on-hadoop – dranxo 2013-06-21 20:09:20

-1

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

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

以下日期模式被認爲是有效的並且可以使用該算法進行識別。

DD MM(MM)YY(YY) YY(YY)MM(MM)DD MM(MM)DD YY(YY)

其中M是一個月的文字就像是月或明年1月

字母格式日期之間

允許定界符是 '/', '\', '', ' ' '|', ' - ',''

它還確認在以下格式 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-一月10 18:00:01.704,dateTimeString = 2015年1月10日18:00:01.704,conDateFormat = YYYY-MM-DD HH:MM: SS.SSS,開始= 18,結束= 46}]

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

的完整源代碼可以在GitHub在https://github.com/vbhavsingh/DateParser