判断一个列表中的字符,是否在另一个列表中的方法
这是一个非常不错的方法,但是有些遗憾的是,无法将被查找的内容拼接在列的后面
searchfor = df2['活性成分'].tolist() #将被查找的series做成列表
searchfor='|'.join(searchfor) #利用join把列表用"|"拼接起来得到一个在contains中能用的串
df3[df3['名称'].str.contains(searcher)]#就可以提取到所要的结果了
这其中有个坑,searcher中是一个非常大的串,这个串里面可能有括号这种字符,括号必须成对出现,如果不成对出现的话对出现一个错误 error: missing ), unterminated subpattern at position 3231
例子:
ss1='肠内营养乳剂(TPF-T)|肠内营养混悬液(TPF-DM)|肠内营养混悬液(TPF-FOS)|复方营养混悬剂|维生素类制剂'
#注意,第二个肠内混悬液的前后括号不一样,一个是半角,一个是全角,再使用.str.contains(searcher)的时候就报错了。
构造一个错误的示例:
df=pd.DataFrame(data=['氯化钾(片)[500mg*48]', '氯化钾(针)[1g:10ml]', '氯化钾注射液(大冢)[1g:10ml]'],columns=['名称']) #源字符集
ss1='氯化钾(针)|氯化钾(片)' #要查找的字符集
df[df['名称'].str.contains(ss1)]#返回查找结果
报错:error: missing ), unterminated subpattern at position 3
问题:ss1中的串有不匹配的括号,一个全角和一个半角匹配了,半角被识别为没有配对。
解决办法:加一个转义符号,就可以解决:ss1='氯化钾\(针)|氯化钾(片)' #要查找的字符集
但是:如果我的ss1非常大,有几百几千个字符集,想找到这个不匹配的括号是很难的,而且报错也不一定就能识别是这个位置出了错,有没有什么更好的办法?让contains把括号认为是一般的字符而不是特殊字符?