我从具有多个用户输入评级的页面中提取数据,这意味着语法有点草率。 案文如下:
<span date="12/10/2014">4.957/10</span>
<span date="12/10/2014">11/10</span>
<span date="12/10/2014">5 / 10</span>
<span date="12/10/2014">i say: 9 /10</span>
<span date="12/10/2014">10/ 10</span>
<span date="12/10/2014">0.1/10, no more</span>
你会如何获得这些评级? 评级将从0到1000000,并且最多包含3位小数。
上面得到的数组应该是:
4.957
11
5
9
10
0.1
所以基本上规则应该是这样的:
*将任何数字与&#34; / 10&#34;匹配背后。
*数字后面可以跟一个点,最多可以有3个附加数字
* /和评级之间可能存在空格,也可能在/和10之间
* / 10之后不应该有/。
答案 0 :(得分:1)
如果我是你,我只是抓住这个号码,然后在正则表达式之外解决它是否符合你的范围:
'(\d+(?:\.\d{1,3})?)\s*/\s*10(?![^<]*/)'
当有超过三个小数位(抓错了数字)时,我意识到我失败了,所以这里有一个更好的一个:
'(?<![\d.])(\d+(?:\.\d{1,3})?)\s*/\s*10(?![^<]*/)'
答案 1 :(得分:-1)
试试这个正则表达式:
[\d]+\.?[\d]*|[\d]*\.?[\d]+
它实际上做的是匹配字符串中第一次出现的数字,该字符串看起来像10或0.10或.10或10.(数字部分可以包含任何数字)。
为了更好地解释它的作用:https://www.regex101.com/