OpenRefine GREL将<p class =“myclass”>更改为</p> <h2>

时间:2016-09-11 02:11:00

标签: javascript jsoup openrefine

我正在使用OpenRefine来清理大约300条记录,并且有一些html文本有多个段落标记,其中包含一个特定的类(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>

1 个答案:

答案 0 :(得分:0)

虽然尝试使用正则表达式解析HTML通常是一个坏主意,但如果您想使用GREL执行此操作,则可以使用:

with(value.match(/(.*)<p class="essay-header">(.*?)<\/p>(.*)/),v,if(v.length()>0,v[0]+"<h2>"+v[1]+"</h2>"+v[2],v))

因为没有全球性的&#39;在OpenRefine中使用正则表达式的选项你必须使用选项&#34;重新转换到X次&#34;要匹配单个单元格中多次出现的事件。

另一种选择是首先将HTML拆分成段然后解析每个段以用h2替换essay-header段:

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("")