4

我必须在数字之间放置千位分隔符。到目前为止我已经做了:

输入字符串

1852  
2589653  
586699  
8542.28

寻找模式

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

用。。。来代替

,  

结果

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

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

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

4

2 回答 2

1

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

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

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

例如,这是一个 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
于 2012-04-17T13:00:27.063 回答
1

这是 PowerShell 中的 RegEx 示例:

[Regex]::Replace(12345, '[0-9](?=(?:[0-9]{3})+(?![0-9]))', '$0''')
12'345
于 2021-04-26T12:52:26.667 回答