我需要正则表达式,它使用不同的分隔符(单个空格,逗号,点)提取所有数字。每个号码都可以不使用或全部使用。
示例:
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+]+
,但它无法正常工作。
答案 0 :(得分:2)
我假设你需要提取的数字用2个或更多的空格分隔,否则就不可能区分前一个数字的结尾和新数字的开头。
如果您需要提取上述格式的数字,XXX XXX.XXX
或XXX,XXX,XXX.XX
或XXX
或XXX 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
它还会匹配1234566
和124354354.343344
等数字。