在 Hive 的正则表达式中转义单引号

Escape single quote in regex in Hive

我从昨天开始尝试在配置单元中编写正则表达式

Select regexp_extract(MyColumn,'Clôture de l''intervention(.*)"typeid"',0) as MyColumn
from MyTable

这个正则表达式 return 是一个空结果,但它应该 return 一些东西。

如果我以这种方式尝试,更短的方式:

Select regexp_extract(MyColumn,'Clôture de l(.*)"typeid"',0) as MyColumn
from MyTable

它 return 有点问题所以我猜问题出在单引号上。

我如何转义它以将其包含在我的正则表达式中?

感谢您的帮助

您想使用“\”。那是一个[反斜杠][引用]。但也要记住你也可以偷懒,只用“。”它将匹配任何单个字符,但在这种情况下通常可以作为一个很好的作弊手段。

你应该使用:

regexp_extract(com_lib,'Clôture de l\'intervention(.*)"typeid"',0)

regexp_extract(com_lib,'Clôture de l.intervention(.*)"typeid"',0)

使用 spark 的示例,但这只是它工作的一个示例。 (并作为字符串转义,因此工作方式略有不同。)

>>> spark.sql("select regexp_extract('Clôture de l\'intervention122342\"typeid\"','Clôture de l\'intervention(.*)\"typeid\"',1) ").show()
+-------------------------------------------------------------------------------------------------+
|regexp_extract(Clôture de l'intervention122342"typeid", Clôture de l'intervention(.*)"typeid", 1)|
+-------------------------------------------------------------------------------------------------+
|                                                                                           122342|
+-------------------------------------------------------------------------------------------------+

但这确实向您展示了如何处理正则表达式以使其工作。从简单开始:

select 'Clôture de l'

这应该是开箱即用的,而且很简单。然后玩它直到每次添加一个字符,直到你得到正确的语法

select 'Clôture de l\''

一旦你把它改正为一个字符串,然后将它移到正则表达式中并再次一次添加一个字符使其工作。

select regexp_extract( 'Clôture de l\'intervention' 'Clôture de l\'',0)

你不需要在 table 上 运行,只需要使用一个字符串,慢慢地一个一个地添加字符就可以了。