[HADOOP] REGEXP_REPLACE 그룹 캡처
HADOOPREGEXP_REPLACE 그룹 캡처
누군가가 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'
다음은 내가 생각했던 진술의 간단한 예입니다. 그러나 이상한 결과를 얻습니다.
하이브 쿼리 :
select regexp_replace('2015-01-01 02:03:04 +0:00', ' ([+-])', ' GMT\1');
실제 결과:
2015-01-01 02:03:04 GMT10:00
"\ 1"은 일치하는 그룹을 출력해야하지만 일치하는 그룹은 숫자 "1"로 바꿉니다.
누군가가 대체 문자열에서 일치하는 그룹을 참조 / 출력하는 올바른 방법을 이해하도록 도와 줄 수 있습니까?
감사!
해결법
-
==============================
1.Hive의 지원 표기법 (적어도 0.14에 대해서, 그리고 내가 생각하기에 정규 표현식 역 참조를위한 0.13.x에 대해서도 이와 같은 방법이 있다고 생각합니다)은 그룹 1을 캡처 할 때 $ 1, 캡처 그룹 2를 $ 2 등으로 보입니다. Matcher 클래스의 replaceAll 메소드를 기반으로 (심지어 구현 될 수도 있음) 이 문서의 밀접한 부분입니다.
Hive의 지원 표기법 (적어도 0.14에 대해서, 그리고 내가 생각하기에 정규 표현식 역 참조를위한 0.13.x에 대해서도 이와 같은 방법이 있다고 생각합니다)은 그룹 1을 캡처 할 때 $ 1, 캡처 그룹 2를 $ 2 등으로 보입니다. Matcher 클래스의 replaceAll 메소드를 기반으로 (심지어 구현 될 수도 있음) 이 문서의 밀접한 부분입니다.
그래서 당신이 원하는 것은 이것이라고 생각합니다.
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)
from https://stackoverflow.com/questions/28592180/regexp-replace-capturing-groups by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Docker가있는 다중 노드 Hadoop 클러스터 (0) | 2019.07.25 |
---|---|
[HADOOP] Hive는 파티션 URL을 보여주기 위해 파티션을 설명합니다. (0) | 2019.07.25 |
[HADOOP] Apache Spark에서 Hadoop InputFormats를 사용하는 방법? (0) | 2019.07.25 |
[HADOOP] Spark를 사용하여 Hadoop HDFS 디렉토리의 모든 파일을 나열 하시겠습니까? (0) | 2019.07.25 |
[HADOOP] 버그 수정 후 여전히 "SCDynamicStore에서 영역 정보를로드 할 수 없습니다." (0) | 2019.07.25 |