【问题标题】:REGEX: Put a space every 3 digits without using " "正则表达式:每 3 位数放一个空格,不使用“”
【发布时间】:2021-04-30 11:32:47
【问题描述】:

你好! 找了一天多没找到答案,特意来问我的问题!

解释: 我创建了一个游戏,这要归功于一个 Discord 机器人,它允许使用许多功能(Atlas),其中一个是我将要讨论的一个:替换。我正在尝试做的是使用正则表达式,每三位数放一个空格来格式化数字,如下所示:

基数:

25
321
54500
78545515201

格式化后:

25
321
54 500
78 545 515 201

但是在替换部分,空格“”被前后修剪,所以我不能做$1 。但是,如果我执行$1 $2,则计算两个参数之间的空格。 所以我要做的是使用替换格式将我的数字格式化为 $1 $2 以便计算空间。 如果有人有解决方案,我会非常感谢你!

编辑:这里是关于替换功能的链接:https://atlas.bot/documentation/tags/replace

【问题讨论】:

  • 什么编程语言?
  • 没有特定的语言,它是一个不和谐的机器人来处理。
  • Discord Bot 使用 PCRE 吗?
  • 我对 REGEX 了解不多,因此无法真正告诉您。与此同时,它的外观如下:仅用于分隔功能。一切都在一个拥抱中关闭。例如:{replace;string;search;replace} 我已经使用过这个函数,它允许用病毒格式化数字,但不幸的是我需要为我的游戏使用空格。有问题的函数: {replace;12345;(\d)(?=(\d\d\d)+$);$1,}
  • 哦,好吧,看看我的回答

标签: regex formatting number-formatting space digits


【解决方案1】:

您可以使用一个空的捕获组来断言一个没有字符捕获的位置,以便您的替换可以是$1 $2

(\d)()(?=(\d{3})+(?!\d))

这是在 JS 中:

https://regex101.com/r/virtsL/1/

但它也兼容 PHP (PCRE)、Python 和 Java。

署名:正则表达式最初来自https://coderwall.com/p/uccfpq/formatting-currency-via-regular-expression,我刚刚添加了空捕获组。


根据您的 cmets,这是您尝试的工作版本;稍作修改:

(\d)()(?=(\d\d\d)+(\D|$))

https://regex101.com/r/McrHgj/1/

【讨论】:

  • 它不起作用,我认为我的 Discord 机器人与这种语言不兼容.. :(
  • 哦!非常感谢,它有效!你真是太棒了! :D
  • @Kydaix 不客气。将来,您应该始终发布您尝试过的内容并链接到您找到的任何官方文档,特别是针对像您这样的利基产品。
【解决方案2】:

const inputStr = `
25
321
54500
78545515201
`

const res = inputStr.replace(/(?<=[0-9])(?=(?:[0-9]{3})+(?![0-9]))/g, " ")
console.log(res)

【讨论】:

  • 这不是我想要做的......我必须使用“$1 $2”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
相关资源
最近更新 更多