【问题标题】:Regex to remove space between words in string正则表达式删除字符串中单词之间的空格
【发布时间】:2017-04-25 06:40:05
【问题描述】:

我正在使用 Hive (Hadoop) 编写类似 SQL 的语句。

我需要删除字段中的空格。例如,邮政编码可能是 XX00 0XX,我想删除 0XX 之前的空格

到目前为止,我有这个正则表达式:

REGEXP_REPLACE(postcode, '[[:space:]]*', '')

但它似乎不起作用。谁能给点建议?

【问题讨论】:

  • 如果您在删除 常规空格 之后,并且 REGEXP_REPLACE 有效,您只需要 REGEXP_REPLACE(postcode, ' +', '')

标签: sql regex hadoop hive


【解决方案1】:

仅仅做一个简单的(非正则表达式)替换会有什么问题吗?试试这个:

REPLACE(postcode, ' ', '')

如果您的version of Hive 不支持REPLACE(),那么您可以使用:

REGEXP_REPLACE(postcode, '\\s+', '')

【讨论】:

  • 感谢您的回复 - 遗憾的是,REPLACE 不是 Hive 中的有效功能:(
  • @Kieran 你用的是什么版本的 Hive?
  • 谢谢你第二个完美的工作:) 祝你有美好的一天
【解决方案2】:

你试过'[[:blank:]]*' 小心,因为这也会捕获标签。

【讨论】:

  • 错误的正则表达式方言
【解决方案3】:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

翻译

select translate('XX00 0XX',' ','')

regexp_replace

select regexp_replace('XX00 0XX',' ','');
select regexp_replace('XX00 0XX','\\s','');
select regexp_replace('XX00 0XX','\\p{Blank}','');
select regexp_replace('XX00 0XX','\\p{Space}','');
select regexp_replace('XX00 0XX','\\p{javaWhitespace}','');

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

替换

select replace ('XX00 0XX',' ','')

(从 Hive 1.3.0 和 2.1.0 开始)。

【讨论】: