1

在我的项目中,我必须解析一组包含数字、日期和其他信息的动态字符串。我尝试用正则表达式编写解析器。它正在工作,但并非一直如此。有人可以为此提出更好的解决方案吗?下面是一个示例字符串

“感谢您于 2012-04-16:17:33:03 在 ATM 的 T NAGAR CAP 中使用您的 HDFC 银行借记卡/ATM 卡以 125.25 卢比的价格支付 125.25 卢比的 ATM WDL。”

在这里我想要像这样的数据

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

1 回答 1

2

仅使用正则表达式解决这个问题,特别是当字符串的确切内容是动态的时,效果不会很好。你需要的是一个分词器和一个带有语法的词法分析器。我没有在 Java 中做过类似的事情,但首先你需要将你的字符串分解成标记(关键字、值、表达式、短语等),比如

“感谢您于 2012-04-16:17:33:03 在 ATM 的 T NAGAR CAP 中使用您的 HDFC 银行借记卡/ATM 卡以 125.25 卢比的价格支付 125.25 卢比的 ATM WDL。”

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

您可以通过定义标记、为它们提供方便的名称并为它们定义规则(即使用正则表达式)来做到这一点。重点是你拥有什么,而不是它的含义之后你需要一个语法,因为正则表达式不会帮助你理解“什么”:

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

这基本上给了你一棵规则树。

通过对输入字符串进行标记并应用语法,您应该能够分析字符串并找到感兴趣的部分。

不幸的是,这只是对这个安静复杂但非常有趣的主题的理论介绍,我无法提供任何代码示例,但我希望这有助于入门。

于 2012-08-01T08:16:37.910 回答