仅使用正则表达式解决这个问题,特别是当字符串的确切内容是动态的时,效果不会很好。你需要的是一个分词器和一个带有语法的词法分析器。我没有在 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
....
这基本上给了你一棵规则树。
通过对输入字符串进行标记并应用语法,您应该能够分析字符串并找到感兴趣的部分。
不幸的是,这只是对这个安静复杂但非常有趣的主题的理论介绍,我无法提供任何代码示例,但我希望这有助于入门。