R:用于识别HTML块中数字的正则表达式

时间:2019-03-07 07:46:57

标签: r regex

这是我第一次遇到堆栈溢出问题,因此,如果我的帖子在质量上可能有所欠缺,请放心。

我想学习一些使用R进行网络抓取的方法,并从一个简单的示例开始->从Wikipedia站点中提取表格。

我设法下载了特定页面并确定了我感兴趣的HTML部分:

<td style="text-align:right">511.000.000\n</td>

现在,我想使用正则表达式从表中提取数据中的数字。所以我创建了一个正则表达式,从我的角度来看,它应该匹配数字的结构:

pattern<-"\\d*\\.\\d*\\.\\d*\\.\\d*\\."

我还尝试了其他变体,但没有一个在HTML代码中找到该数字。我想保持开放的模式,因为数字可能有成千上万。

  1. 我的问题:这个数字在HTML代码中,可能是
    必须为非数字代码包括一些代码(应 不会被提取...)
  2. 什么是正确的版本
    模式以正确识别号码?

非常感谢您的支持!

2 个答案:

答案 0 :(得分:0)

仔细查看您的正则表达式。您假设数字中有4个句点(\\.),但是在您自己的示例中,只有两个句点。它不会匹配,因为当星号将\\d标记为可选(零个或多个)时,句点未标记为可选。如果您在第3和第4个周期之后添加?修饰符,则可能会发现您的模式开始匹配。

答案 1 :(得分:0)

这么多星星意味着很多回溯。
再有一点,使用\\d*可以匹配任何组中超过3位的数字,也可以匹配没有数字的组。

假设您的数字始终是整数,使用.作为千位分隔符,则可以使用以下命令:\\d{1,3}(?:\\.\\d{3})*(请注意,非捕获组构造(?:...)的用法-隐含如Regular Expressions as used in R中所述,在参数中使用perl = TRUE