regexp_extract 配置单元未按预期工作
Posted
技术标签:
【中文标题】regexp_extract 配置单元未按预期工作【英文标题】:regexp_extract hive not working as expected 【发布时间】:2015-06-26 09:32:52 【问题描述】:我开始使用 hive 进行一些数据准备,但在使用 regexp_extract udf 时遇到了一个特殊问题。我正在研究 XML 结构,并且正在尝试从 XML 字符串中提取一些元素。 这是一个例子。我正在操作的字符串是:
<b>ajsdnf</b>
<a>asdhf</a>
<a>alfnv</a>
<b>ajsdnf</b>
<a>test</a>
正则表达式(<a>.*?<\/a>)
应该提取所有只包含带有a 标签的元素的字符串。当我在regex101 上检查我的逻辑时,它会找到所有正确的组。
但是当我像这样对蜂巢运行它时
select regexp_extract('<b>ajsdnf</b><a>asdhf</a><a>alfnv</a><b>ajsdnf</b><a>test</a>','(<a>.*?<\/a>)',0) from some_table limit 1;
它只返回第一个<a>asdhf</a>
。根据 regex_extract 的文档,如果我将整数 0 作为第三个参数传递,它应该返回所有出现的事件。有没有机会我可以达到以下结果
<a>asdhf</a>
<a>alfnv</a>
<a>test</a>
如果您想知道为什么我不使用 xpath 来处理这个 XML 问题,我的结构要复杂得多,并且想要提取 XML 树的某些部分,包括它们的所有子节点。这是 hive 的 xpath udfs 目前无法处理的。
【问题讨论】:
如果你删除limit 1
会发生什么?
regexp_extract 不能那样工作。它只匹配一次。除非您知道匹配的数量,否则 regexp_extract 不起作用。你可能想看看这个:qnalist.com/questions/4957014/…
此线程link 中的答案建议索引0 应返回所有匹配的组。我哪里错了?
@nhahtdh 我按照链接关注,但它返回不匹配的字符串..
@Prashanth:请提出一个新问题。我不知道你的上下文,可能与这个问题中的不同,所以我没有办法给你任何建议。
【参考方案1】:
select regexp_replace('<b>ajsdnf</b><a>a<b>aksdhf</b>dhf</a><a>alfnv</a><b>ajsdnf</b><a>test</a>','(.*?)(<a>.*?<\/a>)(.*?)','$2') from some_tablelimit 1;
这成功了。感谢 nhahtdh 的建议
【讨论】:
以上是关于regexp_extract 配置单元未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 高度内的 UITableView 未按预期工作