regex - 如何在第 n 个出现配置单元之前进行 regexp_extract
问题描述
我有这样的字符串:
LLC1R.8888.GR0054656*DR.798012...2..............GR0054656*EUR*
我已经用这个进行了提取:
REGEXP_EXTRACT(b.COLUMN_YY,'^([^\.]+)\.?',2)
但它发生错误2:mapredtask
at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:157)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String,java.lang.Integer) on object org.apache.hadoop.hive.ql.udf.UDFRegExpExtract@5875de6a of class org.apache.hadoop.hive.ql.udf.UDFRegExpExtract with arguments :java.lang.String, ^([^.]+).?:java.lang.String, 2:java.lang.Integer} of size 3
at org.apache.hadoop.hive.ql.exec.FunctionRegistry.invoke(FunctionRegistry.java:1024)
at org.apache.hadoop.hive.ql.udf.generic.GenericUDFBridge.evaluate(GenericUDFBridge.java:194)
at org.apache.hadoop.hive.ql.exec.ExprNodeGenericFuncEvaluator._evaluate(ExprNodeGenericFuncEvaluator.java:186)
at org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:77)
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.IndexOutOfBoundsException: No group 2
出了什么问题,应该如何解决?
任何帮助/想法将不胜感激。谢谢你。
解决方案
从错误堆栈跟踪中很清楚出了什么问题:“ Caused by: java.lang.IndexOutOfBoundsException: No group 2 ”
返回使用模式提取的字符串。例如,
regexp_extract('foothebar', 'foo(.*?)(bar)', 2)
返回'bar.'
注意在使用预定义的字符类时需要注意:使用'\s'
作为第二个参数将匹配字母s
;'\\s'
是匹配空格等所必需的。'index'
参数是Java regex Matchergroup()
方法索引。有关“索引”或 Java 正则表达式方法的更多信息,请参阅docs/api/java/util/regex/Matcher.htmlgroup()
。
因此,要获取之前的第一个子字符串.
,您应该使用
REGEXP_EXTRACT(b.COLUMN_YY, '^([^.]*)', 1)
要获取 之间的第二个字符串.
,请使用
REGEXP_EXTRACT(b.COLUMN_YY, '^[^.]*\\.([^.]*)', 1)
要获取 之间的第 n 个字符串.
,请使用(?:[^.]*\.){n-1}
. 因此,要获得第三个,请使用
REGEXP_EXTRACT(b.COLUMN_YY, '^(?:[^.]*\\.){2}([^.]*)', 1)
请注意,1
index参数会REGEXP_EXTRACT
返回组 1 中捕获的值,请参阅下面的模式详细信息:
^
- 字符串的开始(?:[^.]*\.){2}
- 这里,出现了两次[^.]*
- 0 个或更多字符.
\.
- 一个.
字符
([^.]*)
-第 1 组:除 . 之外的任何 0 个或多个字符.
。
推荐阅读
- python - 'Jupyter' 未被识别为内部或外部命令
- javascript - 每次存在换行符 (↵) 字符时展开数组
- node.js - 当我尝试创建一个新的角度项目时出现以下错误
- r - 在R中查找每日数据与每月平均值的百分比差异
- mongodb - 如何使用 dockerfile 在 centos docker 容器中安装 mongo-org-tools?
- javascript - 如何修复 Heroku 中的 window.open()?
- xml - XSLT:从 XML 文件中提取元素集并从 txt 文件中获取值
- java - Java Parallel Stream 与 ExecutorService 的性能
- c++ - STM32F767ZIT6 Nucleo openocd 闪存
- tensorflow - TF-Lite:将 pb 模型转换为 tflite 后 PReLU 工作不正确