【问题标题】:How can I use regular expressions to insert commas into large integers?如何使用正则表达式将逗号插入大整数?
【发布时间】:2019-09-24 15:25:21
【问题描述】:

我有一个包含很多大整数的文本文档,例如123456789。我想在其中自动插入逗号以使其更具可读性:123,456,789。但是,我的文档也包含小数,这些应该保持不变。是否有将插入这些的正则表达式?类似问题的答案建议(?<=\d)(?=(\d\d\d)+(?!\d)),但这也检测十进制数。更重要的是,我无法使用 Notepad++ 或 Overleaf 插入逗号。我应该用什么替换这个正则表达式?

【问题讨论】:

  • 所以你不想在 53521.35 中插入逗号?
  • 虽然在第二个,是的,但不是小数部分。但是,十进制值不足以保证逗号。
  • 小数部分可以有多少位?
  • 您使用什么语言/工具?什么正则表达式的味道?
  • 我用 Notepad++ 或 Overleaf,不管用什么 :)

标签: regex regexp-replace


【解决方案1】:

如果您不想接触小数,您可以使用 (*SKIP)(*FAIL) 匹配一个点,并使用 1+ 位数字来消耗不应该包含在匹配中的字符。

(在 Notepad++ 7.7.1 上测试)

\.\d+(*SKIP)(*FAIL)|\B(?=(?:\d{3})+(?!\d))

在替换中使用逗号,

部分

  • \.\d+(*SKIP)(*FAIL) 从字面上匹配一个点和 1 个以上的数字(匹配保持不变)
  • |或者
  • \B Anchor 匹配 \b 不匹配的地方
  • (?=正向前瞻,断言右边是
    • (?:\d{3})+ 重复 1+ 次匹配 3 个数字
    • (?!\d)负前瞻,断言右边的不是数字
  • ) 关闭前瞻

Regex demo

【讨论】:

    【解决方案2】:

    我的猜测是,也许,

    (?<=\d)(?=(?:\d{3})+(?!\d|\.))
    

    (?!^)(?=(?:\d{3})+(?!\.|\d))
    

    Demo 2

    \d+\.\d*(*SKIP)(*FAIL)|(?!^)(?=(?:\d{3})+(?!\.|\d))
    

    Demo 3

    可能与您要编写的内容接近,您可以简单地将其替换为逗号。


    如果您希望简化/修改/探索表达式,在regex101.com 的右上角面板中已对此进行了说明。如果您愿意,您还可以在 this link 中观看它如何与一些示例输入匹配。


    【讨论】:

    • 感谢您的回复!不幸的是,这也将逗号放在左端点,如,34534.,345。您知道解决方法吗?
    猜你喜欢
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多