目标:提取字符串中长度5-7的数字python脚本hive样式:
import datetimedata_dic = {'table_name':'table_name','data_table_name':'data_table_name','data_time':int(datetime.date.today().strftime('%Y%m%d'))-1}sql = """insert table {table_name}(idadtag)select id,case when regexp_instr(adtag,'\\\\d{{5,7}}',1,1,0)>0 then regexp_extract(adtag,'(\\\\d{{5,7}})',1)else adtag end as adtagfrom {data_table_name}where ftime = {data_time}""".format(**data_dic)
正常来说,正则pat里面只需要传入’\d{5,7}‘就可以了,一个斜杠最后用了四个斜杠才生效,转化是这样的:
第一层:python字符串转译:\\——\
第二层:sql字符串转译:\——
这样就四个斜杠最后变成了两个斜杠(python转义),两个斜杠再变成一个斜杠(sql转义);另外一个问题,python字符串format方法转译问题,最后用了双’{}’