gpt4 book ai didi

regex - Spark 2.2/Jupyter Notebook SQL regexp_extract 函数与正则表达式模式不匹配

转载 作者:行者123 更新时间:2023-12-04 06:33:05 31 4
gpt4 key购买 nike

我在 Jupyter (Scala) 笔记本中使用 regexp_extract Spark 2.2 SQL 函数来匹配 11 个或更多重复字符的字符串。

这是正则表达式:

^(.)\1{10,}$

现在,让我们看看使用 regexp_extract 函数的模式。这是我在笔记本中使用它的方式:
spark.sql("SELECT REGEXP_EXTRACT('hhhhhhhhhhhhh', '^(.)\\1{10,}$', 1) as ExtractedChar").show()

+-------------+
|ExtractedChar|
+-------------+
| |
+-------------+

奇怪,没有输出。让我们确保我的正则表达式模式实际上是正确的。 Yep, looks right.

您可能想知道为什么正则表达式模式包含两个“\\”字符,因为它是一个转义字符,所以两个是必需的。这里有一些验证:
1. val string = "SELECT REGEXP_EXTRACT('hhhhhhhhhhhhhhhhhhhhh', '^(.)\\1{10,}$', 1) as ExtractedChar"
2. println(string)
SELECT REGEXP_EXTRACT('hhhhhhhhhhhhhhhhhhhhh', '^(.)\1{10,}$', 1) as ExtractedChar

好的,让我们确保 regexp_extract 函数正常工作:
spark.sqlContext.sql("SELECT REGEXP_EXTRACT('TESTING', '^.', 0) as test").show()
+----+
|test|
+----+
| T|
+----+

好的,也许问题出在 Jupyter 笔记本上?检查并使用 Scala REPL 后,我仍然遇到同样的问题。

为什么我无法让这个正则表达式成功匹配的任何想法?

编辑:Spark SQL 是一个要求。我可以使用 Scala 创建自己的 UDF;然而,UDF 被 Spark 黑盒化,这意味着它们不会被完全优化。

最佳答案

我找到了解决方案。 SQL 字符串需要包含 4 个“\”字符,如下所示:

'^(.)\\\\1{10,}$'

关于regex - Spark 2.2/Jupyter Notebook SQL regexp_extract 函数与正则表达式模式不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46163433/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com