【问题标题】:How to format a number with regular expression [duplicate]如何使用正则表达式格式化数字[重复]
【发布时间】:2016-10-07 11:15:21
【问题描述】:

我在格式化数字时遇到了问题。在巴西,我们得到了一种称为“CPF”的文件,这是每个公民都拥有的一种个人身份证。

下面是格式正确的 CPF 编号示例:096.156.487-09

我正在尝试使用正则表达式来格式化包含 CPF 编号的字符串,但我很难做到。我当前的代码正在返回未格式化的数字。

例如:它应该输出123.456.789-0,但我得到的是1234567890

这是我当前的代码:

    String cpf ="09551130401";
    cpf = cpf.replaceAll("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})", "$1.$2.$3-$4");
    System.out.println(cpf);

【问题讨论】:

  • 您的正则表达式似乎与您的输入不匹配。您的正则表达式需要 14 位数字,但只有 10 位。
  • 您是否尝试计算09551130401 中的位数以查看它是否与您的正则表达式匹配?这样做,你会感到惊讶。
  • 这与stackoverflow.com/questions/37679323/… 用另一个帐户提出的问题完全相同。

标签: java regex string expression


【解决方案1】:

我不确定我是否正确......但也许你正在寻找这种模式:

"(\\d{3})(\\d{3})(\\d{3})(\\d{2})"

并替换为$1.$2.$3-$4

Online Demo


完整代码:

String cpf ="09551130401";
cpf = cpf.replaceAll("(\\d{3})(\\d{3})(\\d{3})(\\d{2})", "$1.$2.$3-$4");
System.out.println(cpf);
//=> 095.511.304-01

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 2014-05-29
    • 1970-01-01
    • 2018-12-20
    • 2019-02-12
    • 2019-11-21
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多