regex - 正则表达式。我需要用前导零推进我的表达
问题描述
我有我的 RegExp: '^[0-9]{0,6}$|^[0-9]\d{0,6}[.,]\d{0,2}'
。
我需要升级上面的条件才能使用像“000”这样的输入。它应该格式化为 '0.00' 我希望得到一个输入和输出列表: 输入:[5555, 55.5, 55.55, 0.50, 555555.55, 000005, 005]
输出:[5555, 55.5, 55.55, 0.50, 555555.55, 0.00005, 0.05]
解决方案
使用 RegExps 时,重要的是用散文描述您希望它匹配的内容,以及您想要对匹配执行的操作。
在这种情况下,您的 RegExp 匹配一个完全由 0-6 位数字组成的字符串,或者一个以 1-7 位数字开头的字符串,然后是0-2位数字。.
,
那就是:要么是一个带有数字但没有,
/的字符串,要么是一个带有数字.
和,
/的字符串,.
然后是多个(最多 2 个)数字。
然后,您要求转换000
为0.00
. 我猜你想将数字标准化为没有不必要的前导零和两位小数。(现在有更多的例子,我猜一个前导零且没有小数点的数字应该在第一个零之后添加小数点)。
我同意使用适当的数字格式化程序可能是要走的路,但是既然我们在谈论 RegExps,如果我不得不使用 RegExps,我会这样做:
- 使用捕获组,因此您可以轻松查看匹配的部分。
- 使用不捕获前导零的正则表达式。
- 不要试图计算正则表达式。在侧面的代码中执行此操作(如有必要)。
就像是:
final _re = RegExp(r"^\d{0,6}$|^(\d{1,7}[,.]\d{0,2})");
String format(String number) {
var match = _re.firstMatch(number);
if (match == null) return null;
var decimals = match[1];
if (decimals != null) return decimals;
var noDecimals = match[0];
if (!noDecimals.startsWith('0')) return noDecimals;
return "0.${noDecimals.substring(1)}";
}
这与您的 RegExp 匹配相同的字符串。
推荐阅读
- google-apps-script - Google Sheets Script MailApp 包含单元格格式
- java - 创建新对象是否有助于防止静态方法中的并发问题?
- python - 如何在 FacetGrid 中不共享轴
- c++ - 将文本文件中的单词添加到向量 c++
- c++ - 工作目录未更新——visual studio
- swift - 添加子视图后,UIScrollview 不起作用
- android - 从 Gradle 构建中排除临时 Realm 文件
- c# - Asp.Net Web Api 2 Json反序列化解析不带引号的字符
- php - Prestashop 从特定 ID 中删除产品
- android - 找不到可选库:android.test.runner