Regex 使用正则表达式从字符串中提取数字[多个格式选项]

Regex 使用正则表达式从字符串中提取数字[多个格式选项],regex,numbers,Regex,Numbers,我绞尽脑汁想想出一个正则表达式,从格式不同的字符串中提取数字。例如: '1', '1.1', '1,1', '1,000,000.20', '1.00000020', '1.000.000,20', '10.20001' 我目前使用正则表达式[-+]?[0-9]*[,]?[0-9]+(?:[eE][-+]?[0-9]+)? 除1000000.20和1.000.000,20外,它在大多数情况下运行良好 你知道如何调整之前的正则表达式来处理这些示例吗 (?!\d+,\d+\.\d+,|\d+\.\

我绞尽脑汁想想出一个正则表达式,从格式不同的字符串中提取数字。例如:

'1', '1.1', '1,1', '1,000,000.20', '1.00000020', '1.000.000,20', '10.20001'
我目前使用正则表达式
[-+]?[0-9]*[,]?[0-9]+(?:[eE][-+]?[0-9]+)?
1000000.20
1.000.000,20
外,它在大多数情况下运行良好

你知道如何调整之前的正则表达式来处理这些示例吗

(?!\d+,\d+\.\d+,|\d+\.\d+,\d+.)^([+-]?(?:\d+|\d{1,3}(?:[.,]\d{3})*)(?:[.,]\d+|[eE][+-]?(?:\d+|\d{1,3}(?:[.,]\d{3})*))?)$
也许是这样的

这将匹配您所述的所有数字,加上以
1e10
1e-9
格式编写的数字

当逗号点格式不一致时,它也将与数字不匹配,即
10.234245214
10.234245.214
10234.245214

还将允许在这些数字的开头使用
+
-


上查看,您可以只捕获单引号内的内容,
([^']+)
。可能有用。特别是,您可以使用“逗号可选,只要它们是一致的”两次(使用“,”和“.”交换)。您在这里使用的是编程语言吗?@joanfihu注意,如果您的文本是干净的,并且数字不在后面(逗号或点之后),您可以尝试类似的方法。如有必要,用单词边界括起来。