一些正则表达式的东西

时间:2011-12-20 15:13:40

标签: python regex

我刚刚开始弄清楚正则表达式,并希望尝试理解它的一些帮助。我一直在使用this来帮助我开始,但是我仍然无法搞清楚。

我要做的是采用这个文字:

<td>8.54/10 over 190 reviews</td>

并拉出“8.54”,所以基本上在第一个“&gt;”之间的任何东西和“/”

使用我的noob技能,我想出了这个:[0-9]。[0-9] [0-9],它将与8.54相匹配,并且适用于所有但是10.00,我需要帐户。

任何人都可以帮助我改进我的表达以适用于最后一个案例吗?

4 个答案:

答案 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),请使用

(?>=\>)(.*?)(?=/)