Replace first occurrence of . in hive - hive

I want to find the first dot (.) in the string of a column and replace it with text.
Tried Regexp_replace, but couldn't find

hive> select regexp_replace ('Hello ... World ...','^(.*?)\\.','$1{text}');
Hello {text}.. World ...

Related

How can I replace a string pattern with blank in hive?

I have a string as:
https://maps.googleapis.com/maps/api/staticmap?center=41.892532+-87.63811&zoom=11&scale=2&size=280x320&maptype=roadmap&format=png&visual_refresh=true%7C&markers=size:mid%7Ccolor:0x8000ff%7Clabel:1%7C2413+S+State+St++Chicago+IL+60616%7C&markers=size:mid%7Ccolor:0x8000ff%7Clabel:2%7C3000+N+Halsted+St++Chicago+IL+60657%7C&markers=size:mid%7Ccolor:0x8000ff%7Clabel:3%7C++++&key=AIzaSyBNEAQcC5niAEeiP3zkA_nuWGvtl0IOEs4
I want to replace the '++++' pattern at the end with blank and not the single occurrence of '+'. Tried using regexp_replace and translate functions in hive but that replaces all the single occurrences of '+' as well.
Use
regexp_replace(string,'[+]{4}','')
Pattern '[+]{4}' means + caracter four times.
Test:
select regexp_replace('++markers=size:mid%7Ccolor:0x8000ff%7Clabel:3%7C++++&','[+]{4}','');
Result:
OK
++markers=size:mid%7Ccolor:0x8000ff%7Clabel:3%7C&
Dod you try this?
replace(string, '++++', '')
Admittedly, this will replace all occurrences of '++++', but your string only has one of them.

Insert comma after every 7th character using regex and hive sql

Insert comma after every 7th character and make sure the data is having comma after every 7th character correctly using regex in hive sql.
Also to ignore the space while selecting the 7th character.
Sample Input Data:
12F123f, 123asfH 0DB68ZZ, AG12453
112312f, 1212sfH 0DB68ZZ, AQ13463
Output:
12F123f,123asfH,0DB68ZZ,AG12453
112312f,1212sfH,0DB68ZZ,AQ13463
I tried the below code, but it didn't work and insert the commas correctly.
select regexp_replace('12345 12456,12345 123', '(/(.{5})/g,"$1$")','')
I think you can use
select regexp_replace('12345 12456,12345 123', '(?!^)[\\s,]+([^\\s,]+)', ',$1')
See the regex demo
Details
(?!^) - no match if at string start
[\s,]+ - 1 or more whitespaces or commas
([^\s,]+) - Capturing group 1: one or more chars other than whitespaces and commas.
The ,$1 replacement replaces the match with a comma and the value in Group 1.
You just want to replace the empty char to ,, am I right? the SQL as below:
select regexp_replace('12F123f,123asfH 0DB68ZZ,AG12453',' ',',') as result;
+----------------------------------+--+
| result |
+----------------------------------+--+
| 12F123f,123asfH,0DB68ZZ,AG12453 |
+----------------------------------+--+

replace all occurrences of a sub string between 2 charcters using sql

Input string: ["1189-13627273","89-13706681","118-13708388"]
Expected Output: ["14013627273","14013706681","14013708388"]
What I am trying to achieve is to replace any numbers till the '-' for each item with hard coded text like '140'
SELECT replace(value_to_replace, '-', '140')
FROM (
VALUES ('1189-13627273-77'), ('89-13706681'), ('118-13708388')
) t(value_to_replace);
check this
I found the right way to achieve that using the below regular expression.
SELECT REGEXP_REPLACE (string_to_change, '\\"[0-9]+\\-', '140')
You don't need a regexp for this, it's as easy as concatenation of 140 and the substring from - (or the second part when you split by -)
select '140'||substring('89-13706681' from position('-' in '89-13706681')+1 for 1000)
select '140'||split_part('89-13706681','-',2)
also, it's important to consider if you might have instances that don't contain - and what would be the output in this case
Use regexp_replace(text,text,text) function to do so giving the pattern to match and replacement string.
First argument is the value to be replaced, second is the POSIX regular expression and third is a replacement text.
Example
SELECT regexp_replace('1189-13627273', '.*-', '140');
Output: 14013627273
Sample data set query
SELECT regexp_replace(value_to_replace, '.*-', '140')
FROM (
VALUES ('1189-13627273'), ('89-13706681'), ('118-13708388')
) t(value_to_replace);
Caution! Pattern .*- will replace every character until it finds last occurence of - with text 140.

How to use only the first comma in a string as a delimiter?

Currently I'm using regexp_substr(token, ''[^,]+'', 1, 2)to select the second part of the string, but obviously if there's a second comma in there, it'll stop the selection at that second comma. For instance, given the input 12345, Hello, World!, I'd like to select Hello, World! from that rather than just Hello. Is there a way to only use the first comma as a delimiter and ignore the second?
This can be done with instr and substr.
select substr(token,instr(',',token)+1) as after_first_comma
from tbl

Regular Expression to not to match period (.) from text(only alpha) but from alphanumeric text

SELECT regexp_replace('FRAME WINDOW MASTER. 160.055-44.9 ADULT Z68.41', '[^A-Z0-9%+/.+ '']', ' ')
FROM DUAL;
The result i get is
FRAME WINDOW MASTER. 160.055 44.9 ADULT
but i want the Result to be
FRAME WINDOW MASTER 160.055 44.9 ADULT ( master without period)
Would this do the trick?
"[^A-Z0-9%+/.+ '']|\.\s"
I'm not sure exactly what you want but it gives the output you want.
Edit this is the fix:
[^A-Z0-9%+/.+ '']|\.(\s|$)
You can match for . after a character and replace groups like this.
Regex: (\D)\. and replace with \1[space]
Regex101 Demo
You can match for . between two characters and replace groups like this.
Regex: (\D)\.(\D) and replace with \1[space]\2
Regex101 Demo
You could also use look around assertions like this. Skeptical about it's support in Oracle.
Regex: (?<=\D)\.(?=\D) and replace with [space]
Regex101 Demo