蜂巢SQLregexp_extract(个数)_(个数)
Hive SQL regexp_extract (number)_(number)
我是 hiveSQL 的新手,我正在尝试从数据 df
的列 col_a
中提取值,格式如下:
\\"id\\":\\"101_12345\\"
我只需要提取101_12345
,但是下划线很难满足我的需要。我尝试使用 regexp_extract(col_a, '(\d+)[_](\d+)')
但只输出 101
。
我能得到一些关于正则表达式的帮助吗?谢谢
简单的解决方案:您不需要两个括号。
这是一个可行的解决方案:'\d+[_]\d+'
当您将标记放入括号中时,正则表达式引擎会将其匹配组合在一起,与完整匹配分开。所以最终结果将包括完整的匹配,以及代表下划线前后的两个额外匹配。为避免这种情况,只需删除括号,因为您并不真正需要它们。
将来,如果您想将正则表达式组合在一起但不希望结果单独包含它,请使用 (?:)
给出的 non-capturing group
。
这是您的代码生成结果的演示,hosted at regex101.com
我是 hiveSQL 的新手,我正在尝试从数据 df
的列 col_a
中提取值,格式如下:
\\"id\\":\\"101_12345\\"
我只需要提取101_12345
,但是下划线很难满足我的需要。我尝试使用 regexp_extract(col_a, '(\d+)[_](\d+)')
但只输出 101
。
我能得到一些关于正则表达式的帮助吗?谢谢
简单的解决方案:您不需要两个括号。
这是一个可行的解决方案:'\d+[_]\d+'
当您将标记放入括号中时,正则表达式引擎会将其匹配组合在一起,与完整匹配分开。所以最终结果将包括完整的匹配,以及代表下划线前后的两个额外匹配。为避免这种情况,只需删除括号,因为您并不真正需要它们。
将来,如果您想将正则表达式组合在一起但不希望结果单独包含它,请使用 (?:)
给出的 non-capturing group
。
这是您的代码生成结果的演示,hosted at regex101.com