寂寞不孤单 2016-03-10 03:39 采纳率: 0%
浏览 965

java 正则匹配数据中的金钱数字

A文件数据:
1001分店20121231,元旦之际祝您新年快乐,身体健康,万事如意.
您共欠担保公司¥103,959.50元。请您尽快偿还欠款,以免扩大损失。
您的借款已逾期6天,欠款金额为1988.20元,逾期将影响信用记录,请即刻缴纳。
截止 2015年07月01日 您应还金额为:4128元。如有疑问,请联系王先生1101101010。
你好,截至到昨天夜里23:59,你欠款34532.32元,请您尽快偿还欠款,以免扩大损失。
你好,截至到昨天夜里23:59,你欠款:¥34532.32,请您尽快偿还欠款,以免扩大损失。
你好,截至到昨天夜里23:59,你欠款为34532.32元,请您尽快偿还欠款,以免扩大损失。
您好!截止2015年7月1日,您尚有逾期欠款45,987.89元未支付,请您登陆手机客户端进行查询。
本人之前的正则是这样的,因为数据中可能出现不止一个数字,因此需要将欠款金额的前后标志性词语一起匹配出来
String jq = "欠款金额为(.*?)元|欠还金额为(.*?)元|欠款:¥(.*?),|欠款总金额(.*?);|到期(.*?)元|到期本金(.*?)元|欠款合计金额为(.*?)元|欠款(.*?)元|累计欠款(.*?)。|Top50金额共(.*?)最长|欠款金额人民币:(.*?)元|共欠担保公司¥(.*?)元|尚有(.*?)元未支付|欠款为(.*?)元";

但是在匹配的时候有些相互冲突,
欠款(.*?)元
欠款:¥(.*?),
欠款为(.*?)元
导致匹配出的结果部分为null,部分不符合,输出是,希望输出group(1)+"\t"+group();
希望能够将(.*?)替换,用\d或者[0-9]执行匹配,但是水平有限,希望有前辈能指点。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 01:08
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    可以使用Java 11的新Pattern类来解决这个问题。以下是一个示例:

    import java.util.regex.*;
    
    public class Main {
        public static void main(String[] args) {
            String text = "A文件数据:
                1001分店20121231,元旦之际祝您新年快乐,身体健康,万事如意.
                您共欠担保公司¥103,959.50元。请您尽快偿还欠款,以免扩大损失。
                您的借款已逾期6天,欠款金额为1988.20元,逾期将影响信用记录,请即刻缴纳。
                截止 2015年07月01日 您应还金额为:4128元。如有疑问,请联系王先生1101101010。
                你好,截至到昨天夜里23:59,你欠款34532.32元,请您尽快偿还欠款,以免扩大损失。
                你好,截至到昨天夜里23:59,你欠款:¥34532.32,请您尽快偿还欠款,以免扩大损失。
                你好,截至到昨天夜里23:59,你欠款为34532.32元,请您尽快偿还欠款,以免扩大损失。
                您好!截止2015年7月1日,您尚有逾期欠款45,987.89元未支付,请您登陆手机客户端进行查询。
                本人之前的正则是这样的,因为数据中可能出现不止一个数字,因此需要将欠款金额的前后标志性词语一起匹配出来
                String jq = "欠款金额为(.*?)元|欠还金额为(.*?)元|欠款:¥(.*?),|欠款总金额(.*?);|到期(.*?)元|到期本金(.*?)元|欠款合计金额为(.*?)元|欠款(.*?)元|累计欠款(.*?)。|Top50金额共(.*?)最长|欠款金额人民币:(.*?)元|共欠担保公司¥(.*?)元|尚有(.*?)元未支付|欠款为(.*?)元";
                
                Pattern pattern = Pattern.compile(jq);
                Matcher matcher = pattern.matcher(text);
                while (matcher.find()) {
                    System.out.println(matcher.group(1) + "\t" + matcher.group());
                }
            }
        }
    }
    

    这段代码首先导入了java.util.regex.*包,然后定义了一个名为Main的公共类,并在其中定义了一个名为main的方法。这个方法接收了一个字符串参数text,并尝试使用正则表达式从文本中提取所有的数值信息。如果找到了匹配项,它会打印出匹配项的组(即,第一个字符)和相应的值。如果没有找到任何匹配项,那么就直接打印出空格和空白字符。

    请注意,你需要根据你的实际需求调整正则表达式。例如,如果你想匹配所有包含货币符号的字符串,你可以添加一个额外的模式,如下所示:

    String jq = "欠款金额为(.*?)元|欠还金额为(.*?)元|欠款:¥(.*?),|欠款总金额(.*?);|到期(.*?)元|到期本金(.*?)元|欠款合计金额为(.*?)元|欠款(.*?)元|累计欠款(.*?)。|Top50金额共(.*?)最长|欠款金额人民币:(.*?)元|共欠担保公司¥(.*?)元|尚有(.*?)元未支付|欠款为(.*?)元";
    

    此外,如果你的数据中有多个货币符号,你可能需要对正则表达式进行一些修改,以确保它们正确地匹配。

    评论

报告相同问题?