2012-08-01 68 views
1

在我的項目中,我必須解析一組包含數字,日期和其他信息的動態字符串。我嘗試用正則表達式編寫解析器。它正在工作,但並非全部。有人可以爲此提出更好的解決方案嗎?下面是一個示例字符串android中的字符串解析

「感謝您使用您的HDFC銀行借記/ ATM卡結束4444盧比 125.25朝着ATM WDL在ATM牛逼NAGAR CAP 2012-04-16:17:33: 03.」

在這裏我要像

bank name =hdfc 
card no =4444 
amount = 125.25 
category = atm 
date = 2012-04-16:17:33:03 
+0

數據是不是有可能在Json或xml中這實際上是正確的方法?因爲這根本不是我認爲的可靠解決方案。 – 2012-08-01 07:26:25

+0

@AndroSelva多數民衆贊成只是一個字符串。沒有辦法不幸的是得到它作爲XML或JSON。 :( – 2012-08-01 07:29:59

+0

如果所有的回答都以同樣的方式來使用正則表達式 – thepoosh 2012-08-01 07:41:32

回答

2

數據解決這只是正則表達式,尤其是當字符串的確切內容是動態的,將不能很好地工作。你需要的是一個詞法分析器和一個帶有語法的詞法分析器。我沒有在Java中做過這樣的事情,但首先你需要將你的字符串分解爲令牌(關鍵字,值,表達式,短語等) like

「謝謝你使用你的HDFC銀行借記卡/ 2012-04-16:17:33:03,ATM卡終止4444,R.2525.25朝TAGAG CAP CAP at ATM的ATM WDL發送。

phrase[Thank you for using your] 
stringconst[HDFC Bank] 
phrase[ending] 
numericconst[4444] 
keyword[for] 
stringconst[Rs.] 
numericconst[125.25] 
.... 

您可以通過定義令牌,給它們方便的名稱併爲它們定義規則(即使用正則表達式)來實現。重點是你所擁有的,不是這個意思 之後,您需要一個gramer爲正則表達式不會幫助你瞭解「什麼」:

sentence ::= intro bankinfo cardinfo valueinfo categoryinfo timeinfo 
intro  ::= phrase 
bankinfo ::= bankname phrase | phrase bankname 
bankname ::= stringconst 
.... 

這基本上給你的規則樹。

通過標記輸入字符串並應用您的語法,您應該能夠分析字符串並找到感興趣的部分。

不幸的是,這只是對這個安靜複雜的理論介紹,但非常有趣的話題,我不能提供任何代碼示例,但我希望這有助於開始。