我有一个如下字符串:
<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的数字。 这个正则表达式出了什么问题?
答案 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)
如果您的正则表达式引擎支持字符类,它可能会更紧凑:
(\d{1,2}\.?\d{0,2})h\s/\s(\d{1,2}\.?\d{0,2})
\d
是[0-9]