这个数字提取正则表达式有什么问题?

时间:2012-04-04 11:37:18

标签: regex

我有一个如下字符串:

<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的数字。 这个正则表达式出了什么问题?

2 个答案:

答案 0 :(得分: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个数字,之前最少需要一个。

答案 1 :(得分:1)

answer is given by stema

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

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

\d[0-9]

shorthand character class