正则表达式将数字提取到组中

Posted

技术标签:

【中文标题】正则表达式将数字提取到组中【英文标题】:Regex extract numer into group 【发布时间】:2011-09-10 17:38:32 【问题描述】:

我有简单的 html 代码:

<span class="someclass" title="4.5 stars"></span>

也可以是:

<span class="someclass" title="5 stars"></span>

我使用了((\d+\.\d+)|(\d+)) star,但它提取了我 3 个组,我需要一个带数值的组。

如何在一组中使用正则表达式在两个字符串中提取 4.5 和 5?

谢谢!

【问题讨论】:

Python、c#、asp.net 和 js?你在用什么? 和大多数人一样,我建议您使用 Html Agility Pack for .net htmlagilitypack.codeplex.com 【参考方案1】:

在python中可以这样做:

import re

txt = '<span class="someclass" title="4.5 stars"></span>, <span class="someclass" title="5 stars"></span>'
re.findall(r'\d+[.]\d+|\d+', txt)

['4.5', '5']

【讨论】:

【参考方案2】:

尝试删除内括号:

(\d+\.\d+|\d+) star

此外,您可能希望先考虑使用 HTML 解析器来提取属性,而不是将正则表达式直接应用于原始 HTML。

【讨论】:

谢谢,这正是我需要的!【参考方案3】:

您可以像这样在左括号后添加一个 ?: 来使组不被捕获

((?:\d+\.\d+)|(?:\d+)) star

但你的情况不需要你的内括号。

你可以将你的表达式改写为

(\d+(?:\.\d+)?) star

【讨论】:

以上是关于正则表达式将数字提取到组中的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配 4 个组中的 2 个

如何使用正则表达式验证捕获组中的最后一个字符

正则表达式如何提取中间的数字?

正则表达式提取数字

c# 正则表达式提取()中的值

使用正则表达式从字符串中提取数字和符号