匹配所有类型的数字

时间:2017-04-22 14:45:15

标签: regex

我需要正则表达式,它使用不同的分隔符(单个空格,逗号,点)提取所有数字。每个号码都可以不使用或全部使用。

示例:

text: 'numbers:   3.14    2 544  345,345.55     506   test   120 100 100'

output: '3.14', '2 544', '345,345.55', '506', '120 100 100'

我创建了re:\d+[(.|,|\s)\d+]+,但它无法正常工作。

1 个答案:

答案 0 :(得分:2)

我假设你需要提取的数字用2个或更多的空格分隔,否则就不可能区分前一个数字的结尾和新数字的开头。

如果您需要提取上述格式的数字,XXX XXX.XXXXXX,XXX,XXX.XXXXXXXX XXX XXX,您可以使用

\b\d{1,3}(?:[, ]\d{3})*(?:\.\d+)?\b

请参阅regex demo

<强>详情:

  • \b - 领先的字边界
  • \d{1,3} - 1至3位数字
  • (?:[, ]\d{3})* - 0个逗号或空格序列([, ])和3位数(\d{3}
  • (?:\.\d+)? - 一个点的可选序列,后跟1+位数
  • \b - 尾随字边界

限制较少的模式与上述相同,但限制量词替换为+

\b\d+(?:[, ]\d+)*(?:\.\d+)?\b

请参阅this regex demo

它还会匹配1234566124354354.343344等数字。