我有一个表,该表将字符串存储在数组中。无法弄清楚为什么,但是一个简单的例子看起来像这样:
dfTemp = pd.merge(df2, df3, how='outer', on=['Year_Month','Client','Product','currency_str'])
dfTemp = dfTemp.fillna(0)
dfTemp['Total_RFQ'] = dfTemp['Done_RFQ'] + dfTemp['Not_Done_RFQ']
dfTemp['Total_RFQ_Volume'] = (dfTemp['Done_RFQ_Volume']) + dfTemp['Not_Done_RFQ_Volume']
df_Client_Product_Ccy_Hit_Rate_Volumes = pd.merge(dfTemp, df1, how='inner', left_on=['Year_Month','Client'], right_on = ['Year_Month','Client'])
基本上,我想检索的是:
+--------+----------------------------------+
| reason | string |
+--------+----------------------------------+
| \N | \N\N\N\NXXX - ABCDEFGH\N\N |
| \N | \N\N\N\NXXX - ABCDEFGH |
| \N | \N\N\N\N |
| \N | \N\N\N\NXXX - ABCDEFGH\N |
| \N | \N\N |
| \N | \N\N\N |
| \N | \N |
+--------+----------------------------------+
XXX-始终相同,但ABCDEFGH可以是任何字符串。 问题是我不能使用表path.path.path_path [4],因为字符串XXX-ABCDEFGH可能是第4个或数组的任何元素(甚至是20个)。
试图使用+--------+----------------------------------+
| reason | string |
+--------+----------------------------------+
| \N | XXX - ABCDEFGH |
+--------+----------------------------------+
但收到错误
where lower(path.path.string) like ('xxx - %')
答案 0 :(得分:1)
此正则表达式将为您完成这项工作([^\N$])+
。
假定图像中显示的字符为$
。
第一,
您可以使用regexp_extract()
来检索特定的数组元素。
它具有以下语法:
regexp_extract(string subject, string pattern, int index)
第二,您可以使用具有以下语法的regexp_replace
:
regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)
测试数据
WITH string_column
AS (SELECT explode(array('XXX - ABCSSSSSSSSSSSGH\N\N',
'\N$\N$\N$\N$XXX - ABCDEFGH$\N\N',
'\N\N\N\N', '\N\N\N\NXXX - ABCDEFGH\N')) AS
str_column
)
SELECT regexp_replace(regexp_extract(str_column, '([^\N$])+', 0), "$", " ")
AS string_col
FROM string_column
会导致
------------------------------
| string_col |
------------------------------
| XXX - ABCSSSSSSSSSSSGH |
------------------------------
| XXX - ABCDEFGH |
------------------------------
| |
------------------------------
| XXX - ABCDEFGH |
------------------------------
regexp_extract(str_column, '(,|[^\N$])+', 0)
regexp_replace(regexp_extract(str_column, '([^\N$])+', 0), "$", " ")
有关的更多信息