我正在使用OpenRefine清理大约300条记录,并有一些html文本,其中有多个段落标签与一个特定的类(class=“短文标题”),包装文本,我想要转换为h2标签。我需要使用哪种GREL来正确地转换这些单元格?我认为我的html选择器可能是“p.essage-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>的示例文本
发布于 2016-09-12 15:52:32
虽然尝试用正则表达式解析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中没有正则表达式的“全局”选项,所以您必须使用“重新转换至多X次”选项来匹配单个单元格中出现的多次。
另一种选择是首先将HTML分成多个片段,然后解析每个片段,用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("")https://stackoverflow.com/questions/39432230
复制相似问题