regex - 如何仅在小数分隔符之前插入千位分隔符

标签 regex string vim replace

我使用这个正则表达式将千位分隔符放入字符串中:

while matchstr(mystr, '\(\d\)\(\d\{3}\)\(\D\|\s\|$\)') != ''
    let mystr = substitute(mystr, '\(\d\)\(\d\{3}\)\(\D\|\s\|$\)', '\1.\2\3', 'g')
endwhile

对于

let mystr = '2000000'

上面的代码给出

2.000.000

问题是,当有小数分隔符时,它还会在小数分隔符(即下面的逗号)后面的数字小数部分中放置千位分隔符。

例如,

let mystr = '2000000,2346'

导致

2.000.000,2.346

虽然我想要这样

2.000.000,2346

我尝试修改上面的代码,但没有找到令人满意的解决方案。 谁能帮我吗?

最佳答案

使用以下对 substitute() 函数的调用而不是整个函数 问题中列出的循环。

substitute(s, '\(\d,\d*\)\@<!\d\ze\(\d\{3}\)\+\d\@!', '&.', 'g')

关于regex - 如何仅在小数分隔符之前插入千位分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10461055/

相关文章:

Google 表格 (RE2) 中的正则表达式 "NOT"

Java正则表达式将 "n' t"转换为 "not"

python - 按可变长度在python中格式化

python - 有没有办法让 vim 以 79 个字符自动包装 python 字符串?

vim - 如何在 Vim 中创建新目录和文件

MySQL REGEXP 未产生预期结果(多字节不安全?)。有解决办法吗?

Ruby 正则表达式帮助

javascript - js-正则匹配数组和字符串

当子替换表达式中抛出异常时,Vim 替换空字符串

vim - 如何使用 VIM 有效浏览 SASS/CSS 文件?