OpenRefine GREL 将 <p class="myclass"> 更改为 <h2>
OpenRefine GREL to change <p class="myclass"> to <h2>
我正在使用 OpenRefine 清理大约 300 条记录,并且有一些 html 文本包含多个带有特定 class (class="essay-header") 的段落标签包装我想转换为 h2 标签的文本。我需要使用哪种 GREL 才能正确转化这些细胞?我认为我的 html 选择器可能是 "p.essay-header",但我无法找到在不丢失段落内部文本的情况下替换标签元素的方法。
要转换的示例文本
<div> <p>Some text of lesser importance.</p> <p class="essay-header">Text to Make a Header</p>. <p>More less important text.</p><p class="essay-header">Again with the Important Text.</p> </div>
虽然尝试使用正则表达式解析 HTML 通常不是一个好主意,但如果您想使用 GREL 执行此操作,您可以使用:
with(value.match(/(.*)<p class="essay-header">(.*?)<\/p>(.*)/),v,if(v.length()>0,v[0]+"<h2>"+v[1]+"</h2>"+v[2],v))
因为 OpenRefine 中没有正则表达式的 'global' 选项,所以您必须使用 "Re-transform up to X times" 的选项来匹配单个单元格中多次出现的 。
另一种选择是先将 HTML 拆分为多个段,然后解析每个段以将 essay-header paras 替换为 h2:
forEach(value.split("<p").join("|<p").split("|"),v,if(v.parseHtml().select(".essay-header").length()>0,v.parseHtml().select(".essay-header")[0].replace('<p class="essay-header">',"<h2>").replace("</p>","</h2>"),v)).join("")
我正在使用 OpenRefine 清理大约 300 条记录,并且有一些 html 文本包含多个带有特定 class (class="essay-header") 的段落标签包装我想转换为 h2 标签的文本。我需要使用哪种 GREL 才能正确转化这些细胞?我认为我的 html 选择器可能是 "p.essay-header",但我无法找到在不丢失段落内部文本的情况下替换标签元素的方法。
要转换的示例文本
<div> <p>Some text of lesser importance.</p> <p class="essay-header">Text to Make a Header</p>. <p>More less important text.</p><p class="essay-header">Again with the Important Text.</p> </div>
虽然尝试使用正则表达式解析 HTML 通常不是一个好主意,但如果您想使用 GREL 执行此操作,您可以使用:
with(value.match(/(.*)<p class="essay-header">(.*?)<\/p>(.*)/),v,if(v.length()>0,v[0]+"<h2>"+v[1]+"</h2>"+v[2],v))
因为 OpenRefine 中没有正则表达式的 'global' 选项,所以您必须使用 "Re-transform up to X times" 的选项来匹配单个单元格中多次出现的 。
另一种选择是先将 HTML 拆分为多个段,然后解析每个段以将 essay-header paras 替换为 h2:
forEach(value.split("<p").join("|<p").split("|"),v,if(v.parseHtml().select(".essay-header").length()>0,v.parseHtml().select(".essay-header")[0].replace('<p class="essay-header">',"<h2>").replace("</p>","</h2>"),v)).join("")