需求:
将处分数据拆分成药材
eg='水蛭(熬),虻虫(去姻,足,熬)各30个,大黄48克(酒洗),桃仁20个(去皮,尖,双仁)' 分析:
数据为逗号分隔,且括号中也存在逗号,需要将括号内逗号替换为其他符号后再按照逗号进行拆分
处理思路:
①通过正则表达式将括号以及内容匹配出来
(去姻,足,熬) (去姻,足,熬)
②将匹配的结果的逗号替换为其他符号(、)
(去姻、足、熬) (去皮、尖、双仁)
③将提取处理结果与原文本进行替换
'水蛭(熬),虻虫(去姻,足,熬)各30个,大黄48克(酒洗),桃仁20个(去皮,尖,双仁)'(去姻,足,熬)→(去姻、足、熬)(去皮,尖,双仁)→ (去皮、尖、双仁)'水蛭(熬),虻虫(去姻、足、熬)各30个,大黄48克(酒洗),桃仁20个(去皮、尖、双仁)' 代码实现 import redef 替换括号中的内容(string,s1,s2):# string 文本 s1替换前的符号 s2替换后的符号 pattern='([^)]*?{s1}[^(]*?)'.format(s1=s1) # 正则提取括号中含有逗号以及括号的内容 strings=re.findall(pattern, string, re.M|re.I) ret=string for i in strings: ii=i.replace(s1,s2) # 将提取结果进行符号替换 print(i,ii) ret=ret.replace(i,ii) # 对原文本进行替换 return ret替换括号中的内容(eg,',','、')
自定义函数
对处理结果进行拆分完整代码:
jupyter
Postgresql函数 DROP FUNCTION IF EXISTS 替换括号中的内容;CREATE FUNCTION 替换括号中的内容(string TEXT,s1 TEXT, s2 TEXT) RETURNS textAS $$global stringglobal s1global s2import redef 替换括号中的内容(string,s1,s2): pattern='([^)]*?{s1}[^(]*?)'.format(s1=s1) strings=re.findall(pattern, string, re.M|re.I) ret=string for i in strings: ii=i.replace(s1,s2) print(i,ii) ret=ret.replace(i,ii) return retreturn 替换括号中的内容(string,s1,s2)$$ LANGUAGE plpython3u;