我需要一个正则表达式来提取定界符之间的特定字符,该特定字符为〜而定界符为“。
这是一些示例文本:
~104.7866 ~"~A.SITI FATONAH "~2014/06/23
和
0.0 ~ 0.0 ~"ENI NURLINI ( 341676 ) ~ "~2016/05/18
我要删除两个“之间的〜,因此输出为
~104.7866 ~"A.SITI FATONAH "~2014/06/23
和
0.0 ~ 0.0 ~"ENI NURLINI ( 341676 ) "~2016/05/18
我打算在sql中使用regex_replace替换〜,但我找不到正确的regex
答案 0 :(得分:1)
以下示例适用于BigQuery标准SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT '~104.7866 ~"~A.SITI FATONAH "~2014/06/23' str UNION ALL
SELECT '0.0 ~ 0.0 ~"ENI NURLINI ( 341676 ) ~ "~2016/05/18'
)
SELECT REGEXP_REPLACE(str, r'("[^"]*)~([^"]*")', r'\1\2')
FROM `project.dataset.table`
答案 1 :(得分:0)
如果可以确定字符串上只有两个"
,则可以使用与此类似的东西(我使用Oracle进行测试,但是几乎所有dbms都应具有concat,substr和intstr类似的功能)
SELECT
col as col_before,
concat(
substr(col, 1, instr(col, '"')),
concat(
regexp_replace(substr(col, 1+instr(col, '"'), instr(col, '"', 1+instr(col, '"'))-instr(col, '"')-1), '~', ''),
substr(col, instr(col, '"', 1+instr(col, '"')))
)) as col_after
FROM (SELECT '0.0 ~ 0.0 ~"ENI NU~RLIN~I ( 341676 ) ~"~2016/05/18' as col FROM DUAL WHERE 1=1) t
WHERE 1=1
基本思想是将字符串分成3个部分,搜索"
。然后将~
替换为中间的~
,然后再次合并3个片断。
这甚至可以用于多个COL_BEFORE = 0.0 ~ 0.0 ~"ENI NU~RLIN~I ( 341676 ) ~"~2016/05/18
COL_AFTER = 0.0 ~ 0.0 ~"ENI NURLINI ( 341676 ) "~2016/05/18
。
~
仅供参考,如果引擎将支持PCRE正则表达式,则该正则表达式也可能起作用,甚至删除了多个> Step 1: Test Case 1: Add an Account
> Step 2: UPDATE database and set a field of Account table to verified
> Step 3: Test Case 2: View Account
(?:(?:^[^"\n]*)")?\K([^"~\n]*)~?(?=.*")
无论如何,似乎Google查询uses re2 engine。从lookahead is not supported on re2开始。您必须坚持第一种方法。