从 html 中提取 <h2> 标题文本,其中标题文本可能包含 <code> 和 </code> 标签

问题描述 投票:0回答:1

我有一个 html 文件,其中包含一些

<h2>
标签,例如

a <- '<section id="sec-standard-stoet-geary" class="level2" data-number="9.4">
      <h2 data-number="9.4" class="anchored" data-anchor-id="sec-standard-stoet-geary">
      <span class="header-section-number">9.4</span> Standardising PISA results</h2>'

b <- '</span> <span class="fu">read_parquet</span>(<span 
     class="st">"&lt;folder&gt;PISA_2015_student_subset.parquet"</span>)</span></code><button 
     title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre> 
     </div>
     </div>
     </section><section id="sec-leftjoin" class="level2" data-number="9.3"><h2 data-number="9.3" 
     class="anchored" data-anchor-id="sec-leftjoin">
     <span class="header-section-number">9.3</span> Linking data using <code>left_join</code>
     </h2>
     <p>'

我可以使用以下方法提取

a
的标题:

str_extract_all(a, '(?<=(<[/]span>)).*(?=(<[/]h))')[[1]] %>% str_squish()
> [1] "Standardising PISA results"

但是在

b
上尝试这个不会返回任何结果:

str_extract_all(b, '(?<=(<[/]span>)).*(?=(<[/]h))')[[1]] %>% str_squish()
> character(0)

编辑:从评论来看,这似乎是正则表达式无法解析换行符。

我尝试在正则表达式

(?s)
中启用单行模式进行解析,但它仍然不起作用

r regex
1个回答
1
投票

我会在这里使用 html 解析器而不是正则表达式:

library(rvest)

read_html(a) |> html_elements("h2") |> html_text() |> trimws()
#> [1] "9.4 Standardising PISA results"

read_html(b) |> html_elements("h2") |> html_text() |> trimws()
#> [1] "9.3 Linking data using left_join"
© www.soinside.com 2019 - 2024. All rights reserved.