我有一些字符串实际上是创建表的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"
,其中包含一些设置,标题和标题是可选的。想法如何为它创建正确的正则表达式?
答案 0 :(得分:4)
答案 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 package或rvest。