我刚刚开始弄清楚正则表达式,并希望尝试理解它的一些帮助。我一直在使用this来帮助我开始,但是我仍然无法搞清楚。
我要做的是采用这个文字:
<td>8.54/10 over 190 reviews</td>
并拉出“8.54”,所以基本上在第一个“&gt;”之间的任何东西和“/”
使用我的noob技能,我想出了这个:[0-9]。[0-9] [0-9],它将与8.54相匹配,并且适用于所有但是10.00,我需要帐户。
任何人都可以帮助我改进我的表达以适用于最后一个案例吗?
答案 0 :(得分:8)
使用量词。
您需要一个或多个数字,后跟一个点,后跟一个或多个数字。数字也可以写为\d
,“一个或多个”量词为+
。
点需要转义,因为它是正则表达式元字符,意思是“任何字符”。因此你的正则表达式应该是:
\d+\.\d+
现在,请注意量词仅适用于原子。字符类([...]
),补充字符类([^...]
)和特殊字符类(\d
,\w
...)是原子,但是如果你想应用一个如果量词不仅仅是一个简单的原子,你需要使用分组运算符()
来分组这些原子。也就是说,(ab)+
会查找ab
中的一个或多个。
答案 1 :(得分:2)
也许回答了我自己的问题。发现这个:
[0-9] +(?:[0-9] *)
似乎有效,有没有人对此有任何改变?
答案 2 :(得分:0)
\d
代替[0-9]
(通常,“ d igit ”)并且有必要记住有时小数是在小数点前没有任何数字写入。因此:
(?<=>)(?:\d+(?:\.\d*)?|\.\d+)(?=/)
好的,那是一个复杂的RE。这是它如何分解(扩展形式)。
(?<= > ) # With a “>” before (but not matched)…
(?: # … match either this
\d+ # at least one digit, followed by…
(?: # …match
\. \d* # a dot followed by any number of digits
) ? # optionally
| # … or this
\. \d+ # a dot followed by at least one digit
) #
(?= / ) # … and with a “/” afterwards (but not matched)
答案 3 :(得分:0)
这可能有效:
\>(.*?)/
# (.*?) is a "non-greedy" group which maches as few characters as possible
然后使用
访问实际值m.group(1)
其中m是re.search或re.finditer返回的匹配对象
如果要直接访问该值(re.findall),请使用
(?>=\>)(.*?)(?=/)