使用REGEX替换方法放千位分隔符

时间:2012-04-17 12:35:37

标签: regex

我必须在数字之间加上千位分隔符。我到现在为止做了:

输入字符串

1852  
2589653  
586699  
8542.28

查找模式

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

更换-以

,  

结果

1,852  
2,589,653  
586,699  
8,542.28 

TODO
我希望从匹配收集中消除1700到2010年的所有年份范围。

任何人都有任何想法。欢迎所有建议。提前致谢。

2 个答案:

答案 0 :(得分:2)

这不是使用正则表达式的好方法。

相反,请使用您的语言的字符串格式化功能:

  • 如果必须从文本中提取数字,请使用简单的正则表达式查找数字。
  • 将它们转换为浮点数或整数(视情况而定)
  • 使用字符串格式说明符表示您希望使用千位分隔符输出它们。

例如,这是一个shell脚本,我从字符串中提取一个数字并用逗号千位分隔符格式化它:(Python 2.x)

In [12]: import re

In [13]: number_pattern = re.compile(r"\d+(.\d+)") #positive integer or floating point number

In [14]: mystring = "The size of the rocket is 3141592.6."

In [15]: number_string = number_pattern.search(mystring).group() #extract the number as a string

In [16]: number_string
Out[16]: '3141592.6'

In [18]: number = float(number_string) #convert to number

In [19]: '{:,}'.format(number) #format with thousands separator
Out[19]: '3,141,592.6'

这样做也会使数字范围变得微不足道。

if (number > 1700) or (number < 2100):
    pass #do something

答案 1 :(得分:1)

这是 PowerShell 中的 RegEx 示例:

[Regex]::Replace(12345, '[0-9](?=(?:[0-9]{3})+(?![0-9]))', '$0''')
12'345