Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从给定字符串中获取支付金额、参考号、名字、姓氏和日期_Java_Regex_Extract - Fatal编程技术网

Java 如何从给定字符串中获取支付金额、参考号、名字、姓氏和日期

Java 如何从给定字符串中获取支付金额、参考号、名字、姓氏和日期,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`

新余额为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` 
`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"