1

我有一个如下字符串:

<br><b>224h / 15.45 verbuchte Stunden</b>

我想提取数字并创建了以下正则表达式:

([0-9]\.?[0-9]{0,2})h\s\/\s([0-9]\.?[0-9]{0,2})

但是对于前面的字符串,这给了我数字 224 和 15 而不是 15.45。这个正则表达式有什么问题?

4

2 回答 2

3

因为您只允许在点之前有一位数字。

试试这个,我{1,2}在点之前用作量词,根据您的需要更改它。可能+会是一个更好的选择,它允许一个或多个。

([0-9]\.?[0-9]{0,2})h\s\/\s([0-9]{1,2}\.?[0-9]{0,2})

一个更好的正则表达式可能是这个

([0-9]+(?:\.[0-9]{1,2})?)h\s*\/\s*([0-9]+(?:\.[0-9]{1,2})?)

我在这里将完整的小数部分设为可选,并且在点之后至少需要一位且最多 2 位数字,并且在之前至少需要一位。

于 2012-04-04T11:39:38.140 回答
1

答案由stema给出

如果您的正则表达式引擎支持字符类,它可能会更紧凑一点,如下所示:

(\d{1,2}\.?\d{0,2})h\s/\s(\d{1,2}\.?\d{0,2})

\d是一个速记字符[0-9]

于 2012-04-04T11:47:01.550 回答