Java 如何从给定字符串中获取支付金额、参考号、名字、姓氏和日期
新余额为58000坦桑尼亚先令。您已收到来自FIRSTNAME LASTNAME 0712349009的53000。2013年12月3日上午11:21,参考号PP131203.1121.A01676。用Tigo Pesa免费支付账单。Tigo Pesa Tunarahissisha Maisha 我曾尝试使用split(),但我担心细节和位置可能会发生变化 预期输出,我希望将从消息中找到的内容分配给变量ieJava 如何从给定字符串中获取支付金额、参考号、名字、姓氏和日期,java,regex,extract,Java,Regex,Extract,新余额为58000坦桑尼亚先令。您已收到来自FIRSTNAME LASTNAME 0712349009的53000。2013年12月3日上午11:21,参考号PP131203.1121.A01676。用Tigo Pesa免费支付账单。Tigo Pesa Tunarahissisha Maisha 我曾尝试使用split(),但我担心细节和位置可能会发生变化 预期输出,我希望将从消息中找到的内容分配给变量ie `newBalance=58,000` `amountReceived=53,000`
`newBalance=58,000`
`amountReceived=53,000`
`fullName=FIRSTNAME LASTNAME`
`fromNumber0712349009 `
`dateReceived=03/12/2013 11:21 AM`
`referenceNumber=PP131203.1121.A01676`
这样我就可以将这些值添加到数据库中
这是我试过的
String message[] = msg.split(" ");
String amount = message[4];
String fullname = message[10]+" "+message[11];
String from = message[12];
String datetime = message[13]+" "+message[14]+" "+message[15];
String ref_number = message[18];
这将匹配:
58,000
FIRSTNAME LASTNAME
03/12/2013 11:21 AM
说明:
因此,我们几乎可以将正则表达式分成三部分,因为它的格式如下所示(一些正则表达式|一些正则表达式|一些正则表达式)|=或
在我们开始之前,(?i)
只意味着任何字母匹配都不区分大小写,这意味着[a-z]
将匹配大写和小写字母
第一件:
这是在中用可选逗号匹配某些数字<代码>?字符后表示前一个字符是可选的
第三篇:更令人困惑的
在这里,我们正在匹配1或2个数字
然后a:
被\
转义,然后再次匹配1或2个数字
,然后我们正在匹配一个空格,am、pm或两者都不
大小写都不重要。希望这有帮助!:-)
这将匹配:
58,000
FIRSTNAME LASTNAME
03/12/2013 11:21 AM
说明:
因此,我们几乎可以将正则表达式分成三部分,因为它的格式如下所示(一些正则表达式|一些正则表达式|一些正则表达式)|=或
在我们开始之前,(?i)
只意味着任何字母匹配都不区分大小写,这意味着[a-z]
将匹配大写和小写字母
第一件:
这是在中用可选逗号匹配某些数字<代码>?字符后表示前一个字符是可选的
第三篇:更令人困惑的
在这里,我们正在匹配
1或2个数字
然后a:
被\
转义,然后再次匹配1或2个数字
,然后我们正在匹配一个空格,am、pm或两者都不
大小写都不重要。希望这有帮助!:-) 如前所述,必须对格式进行一些假设,否则无法提取数据
以下内容将片段提取到编号的捕获组中
1.欠款(余额)
2.已付(已收)金额
3.Firstname Lastname(在“from”之后,逗号之前)
4.日期(带数字/数字/数字格式的字符串)
5.参考号(参考号后面的字符串,以点结尾
如果其中的一些假设可能会发生变化,则需要编辑正则表达式:
"balance is \\D+([\\d,]+(?:\\.\\d+)?).*?([\\d,]+(?:\\.\\d+)?).*?from\\s+([^,]+).*?\\b(\\d+/\\d+/\\d+)\\b.*?Reference no.\\s+(\\S+?)\\.\\s"
您应该设置不区分大小写和点匹配换行符的选项。如前所述,您必须对格式进行一些假设,否则无法提取数据 以下内容将片段提取到编号的捕获组中 1.欠款(余额) 2.已付(已收)金额 3.名字Lastname(在“from”之后,逗号之前) 4.日期(数字/数字/数字格式的字符串) 5.参考号(参考号后的字符串,以点结尾 如果其中的一些假设可能会发生变化,则需要编辑正则表达式:
"balance is \\D+([\\d,]+(?:\\.\\d+)?).*?([\\d,]+(?:\\.\\d+)?).*?from\\s+([^,]+).*?\\b(\\d+/\\d+/\\d+)\\b.*?Reference no.\\s+(\\S+?)\\.\\s"
您应该设置不区分大小写和点匹配换行符的选项如果格式不保持不变,则无需执行任何操作。此外,通常希望您在问题中显示您试图编码解决方案的尝试。以下是我尝试的
字符串消息[]=msg.split(“”)
String amount=message[4];
String fullname=message[10]+“”+message[11];
String from=message[12];
String datetime=message[13]+“”+message[14]+“”+message[15];
String ref\u number=message[18];
@thatidiotguy@Gpak:我已使用您的评论中的详细信息更新了问题。最好发布您在问题本身中尝试过的信息。如果格式无法保持不变,则无需执行任何操作。此外,通常希望您在问题中显示您试图编码解决方案的尝试n、 以下是我尝试过的String message[]=msg.split(“”;
String amount=message[4];
String fullname=message[10]+“”+message[11];
String from=message[12];
String datetime=message[13]+“”+message[14]+“”+message[15];
String ref\u number=message[18];
@thatidiotguy@Gpak:我已根据您的评论更新了问题的详细信息。最好发布您在问题中尝试过的信息。
(?<=(received\s))[0-9]+\,?[0-9]+
(?<=\.\s)\d{1,2}\/\d{1,2}\/\d{2,4}\s[0-9]{1,2}\:[0-9]{1,2}(\s(am)|\s(pm))?
(?<=\.\s)\d{1,2}\/\d{1,2}\/\d{2,4}\s
[0-9]{1,2}\:[0-9]{1,2}(\s(am)|\s(pm))?
"balance is \\D+([\\d,]+(?:\\.\\d+)?).*?([\\d,]+(?:\\.\\d+)?).*?from\\s+([^,]+).*?\\b(\\d+/\\d+/\\d+)\\b.*?Reference no.\\s+(\\S+?)\\.\\s"