如何查找以&#34结尾的所有表达式;

时间:2014-12-01 17:40:14

标签: html regex r string stringi

我有一些字符串实际上是创建表的HTML代码,例如

z <- "<TABLE ALIGN=\"RIGHT\" BORDER CELLSPACING=\"0\" CELLPADDING=\"0\">
   <CAPTION><B>MESA HIGH VICTORIES</B></CAPTION>
   <TH>Team</TH>
   <TH>Score</TH>
   <TR ALIGN=\"CENTER\">
   <TD><B>Parkfield High Demons</B></TD>
   <TD><B>28 to 21</B></TD>
   </TR>
   <TR ALIGN=\"CENTER\">
   <TD><B>Burns High Badgers</B></TD>
   <TD><B>14 to 13</B></TD>
   </TR>
   </TABLE>"

我想提取表达式

<TABLE ALIGN=\"RIGHT\" BORDER CELLSPACING=\"0\" CELLPADDING=\"0\"> <CAPTION><B>MESA HIGH VICTORIES</B></CAPTION> <TH>Team</TH> <TH>Score</TH> <TR

所以我想提取以<TABLE开头并以第一"<TR"

结尾的字符串部分

我能做的最好的事情就是使用stringi package

中的函数

stri_extract_all_regex(z, "(?i)\\<table.*?\\>(\\s+)?(\\<caption,*? \\>)?")

输出

[[1]] [1] "<TABLE ALIGN=\"RIGHT\" BORDER CELLSPACING=\"0\" CELLPADDING=\"0\">\n "

但仍然不是我的意思。在"<TR"之前,字符串中唯一的必填部分是"<TABLE",其中包含一些设置,标题和标题是可选的。想法如何为它创建正确的正则表达式?

2 个答案:

答案 0 :(得分:4)

<TABLE\b[^>]+>[\s\S]+?<TR

试试这个。看看演示。

http://regex101.com/r/vF0kU2/7

答案 1 :(得分:3)

使用rex可能会使这类任务变得更简单。

z <- "<TABLE ALIGN=\"RIGHT\" BORDER CELLSPACING=\"0\" CELLPADDING=\"0\">
   <CAPTION><B>MESA HIGH VICTORIES</B></CAPTION>
   <TH>Team</TH>
   <TH>Score</TH>
   <TR ALIGN=\"CENTER\">
   <TD><B>Parkfield High Demons</B></TD>
   <TD><B>28 to 21</B></TD>
   </TR>
   <TR ALIGN=\"CENTER\">
   <TD><B>Burns High Badgers</B></TD>
   <TD><B>14 to 13</B></TD>
   </TR>
   </TABLE>"

library(rex)
re_matches(z,
  rex(
    capture(name='table',
      "<TABLE", zero_or_more(any, type = 'lazy'), "<TR"
    )
  ), options='single-line')

但是我不会建议使用正则表达式解析HTML。您可能希望改为使用XML packagervest