- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想知道是否有人可以帮助我了解如何使用 Hive 的 regexp_replace 函数来捕获正则表达式中的组并在替换字符串中使用这些组。
我有一个我正在解决的示例问题,涉及日期修改。在此示例中,我的目标是采用与 SimpleDateFormat 解析不兼容的字符串日期并进行小幅调整以使其兼容。日期字符串(如下所示)需要在字符串中的偏移符号 (+/-) 前加上“GMT”。
因此,给定输入:
'2015-01-01 02:03:04 +0:00'
-or-
'2015-01-01 02:03:04 -1:00'
我想要输出:
'2015-01-01 02:03:04 GMT+0:00'
-or-
'2015-01-01 02:03:04 GMT-1:00'
这是一个我“认为”可行的语句的简单示例,但我得到了奇怪的输出。
hive 查询:
select regexp_replace('2015-01-01 02:03:04 +0:00', ' ([+-])', ' GMT\1');
实际结果:
2015-01-01 02:03:04 GMT10:00
请注意,“\1”应该输出匹配的组,而是用数字“1”替换匹配的组。
谁能帮我理解在替换字符串中引用/输出匹配组的正确方法?
谢谢!
最佳答案
对于正则表达式反向引用,Hive 支持的符号(至少对于 0.14,我想我记得对于 0.13.x 也是这样)对于捕获组 1 似乎是 $1
, $2
用于捕获组 2 等。看起来它基于(甚至可能由)replaceAll method from the Matcher class 实现.这是该文档的相关部分:
Dollar signs may be treated as references to captured subsequences as described above, and backslashes are used to escape literal characters in the replacement string.
所以我想你想要的是:
select regexp_replace('2015-01-01 02:03:04 +0:00', ' ([+-])', ' GMT$1');
例如:
hive> select regexp_replace('2015-01-01 02:03:04 +0:00', ' ([+-])', ' GMT$1');
OK
2015-01-01 02:03:04 GMT+0:00
Time taken: 0.072 seconds, Fetched: 1 row(s)
hive> select regexp_replace('2015-01-01 02:03:04 -1:00', ' ([+-])', ' GMT$1');
OK
2015-01-01 02:03:04 GMT-1:00
Time taken: 0.144 seconds, Fetched: 1 row(s)
关于REGEXP_REPLACE 捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28592180/
我对正则表达式有疑问。 我想搜索这样的文本 ' A ' - (space, BIG SINGLE CHAR and SPACE) SELECT regexp_replace(' A Text B Te
运行时: select regexp_replace('( (test :Name (x) :Table (y) )','\s+\:Name \(.*?\)',' avner '); 我得到: "(
在 postgres 中,我使用 regexp_replace 清理一些雅虎电子邮件地址。 SELECT regexp_replace(domain,'yahoo\.co[^\.].*','yahoo
我想知道是否有人可以帮助我了解如何使用 Hive 的 regexp_replace 函数来捕获正则表达式中的组并在替换字符串中使用这些组。 我有一个我正在解决的示例问题,涉及日期修改。在此示例中,我的
我想使用 regex_replace 将数字后的数据替换为 ''。 例如: 输入-->输出 MA0244891-D --> MA0244891 MA0244891 --> MA0244891 MA02
我有一个字符串如下 Welcome to the world of the Hackers 我正在尝试替换列出的字符串的出现,即 of,to,the在使用以下查询的整个字符串之间,但如果模式是连续的,
我已经阅读了 Oracle 关于 REGEXP_REPLACE 函数的文档,但它没有按预期工作 这是我得到的: 我的目标:为每组连续数字连接一个字符 我的输入: (1101 + 1102) * 110
我在 Oracle 11.2.0.3.0/Toad for Oracle 11.6.1.6 中使用以下查询: select regexp_replace('000010PARA197427'
我需要替换 key:value 对周围的方括号,类似于以下内容。任何帮助深表感谢! “属性”中的数据如下所示: name: property1 value: [12345667:97764458] *
我想将“Shri_”添加到客户表的 First_name 中,仅适用于开头没有“Mr_”的姓名。 customer表数据如下: 我正在使用下面的脚本,但没有用。 update customers se
我想从 PSU 12.1.0.2.170117 获取 12.1.0.2.170117。模式 ([\d|\.]+) 似乎工作正常:https://regex101.com/r/bDCF0w/1 但是,它
我有一个非常简单的代码: SELECT REGEXP_REPLACE('test_4444','test_([0-9]+)','ok\1'); 它应该导致 ok4444 但结果是 ok1 我缺少什么?
我有一个数据库,其中一列包含数字。 3 个示例值: 111111155522222225553333333555 我需要反转并在每个数字之间加一个点。即上述每个示例的结果将是: 5.5.5.1.1.1
我需要用两个特定符号(@ 和 &)之间的 % 替换所有空格;喜欢以下内容: 'this @ is test &that did not @turn& out well' 应转换为 'this @%
我有这样的字符串:aa/ss/[img]aa/ss/dd[/img][img]aa/ss/dd[/img]aa/ss 我需要将这段 /ss/ 替换为:/WW/ 但仅当它们位于 [img] 标签之间时。
我正在尝试导入一个值包含这样的数据的 JSON 文件 "\"Koslov Git †girish\" Ges" 返回应该像 "Koslov Git †girish Ges" 多余的\"是麻烦 我尝试了
如何用空格替换 1990-2050 中的任何年份? 我可以按如下方式替换任何 4 位数字 select regexp_replace('sdfg 2000', '(\y(\d{4})\y)', '',
在 PostgreSQL 中使用 regexp_replace,我开发了(在 SO 的大量帮助下)匹配前 n 个字符的模式,如果最后一个字符不在我不知道的字符列表中'希望字符串结束于. regexp_
我正在使用 PostgreSQL regexp_replace 函数来转义字符串中的方括号、圆括号和反斜杠,这样我就可以将该字符串用作正则表达式模式本身(还有对该字符串进行的其他操作在使用它之前,但它
我想使用 REGEXP_REPLACE 来清理用 '' 包裹它们的字符串值,我尝试了以下方法: REGEXP_REPLACE("Stacko 'N' verflow",'([A-Z])','\\1')
我是一名优秀的程序员,十分优秀!