查找包含HTML的字符串中的所有匹配项

时间:2017-05-30 12:45:09

标签: html r regex string

我有一个包含HTML的字符串,如:

s <- "...<span class=\"pull-right\">170 cm</span>...
<span class=\"pull-right\">29</span>...
<span class=\"pull-right\">06/24/1987</span>..."

其中...表示其间有其他HTML标记。我想在></span>之间提取信息,这可能是

  • 仅数字
  • 数字和字符(大写或小写或两者)
  • 表单mm/dd/yyyy
  • 的日期

我为正则表达式想出了类似的东西:

">[0-9/]*[a-z ]*[A-Z]*</span>"

这是对的吗?如何提取感兴趣的值?也就是说,给定s

170 cm
29
06/24/1987

2 个答案:

答案 0 :(得分:1)

您最好选择HTML解析器。但是,如果您需要一个快速而肮脏的基于正则表达式的解决方案,请使用lookarounds在某个开头((?<=>)之前的>})和结束((?=</span>)之间的尾随</span>之间提取模式})模式:

(?<=>)[0-9/A-Za-z ]*(?=</span>)

请注意0-9/a-zA-Z合并为一个类,否则1 Gb之类的字符串将不匹配(原始正则表达式要求大写字母遵循小写那些)。

perl=TRUE提供了这些外观:

m <- gregexpr("(?<=>)[0-9A-Za-z /]*(?=</span>)", s, perl=TRUE)
regmatches(s, m)

演示:https://ideone.com/yvXIuP

答案 1 :(得分:0)

这是匹配

的正则表达式

170 cm

29

1987年6月24日

(\d{2}\/\d{2}\/\d{4})|(\d+ [A-Za-z]+)|(\d+)