首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenRefine GREL将<p class="myclass">更改为<h2>

OpenRefine GREL将<p class="myclass">更改为<h2>
EN

Stack Overflow用户
提问于 2016-09-11 10:11:00
回答 1查看 182关注 0票数 0

我正在使用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>的示例文本

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-12 15:52:32

虽然尝试用正则表达式解析HTML通常不是一个好主意,但如果你想用GREL来做这件事,你可以使用:

代码语言:javascript
复制
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替换文章标题部分:

代码语言:javascript
复制
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("")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39432230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档