我如何用相应的单个字符串替换这些列中的每一列中的3个字母串。
('Ala' = 'A','Arg' = 'R','Glu' = 'E', 'Lys' = 'K', 'Ser' = 'S', 'Thr' = 'T', 'Ile' = 'I', 'Leu' = 'L', 'Met' = 'M')
| 色谱柱A|
| - -----|
| Arg790Met|
| Gly724Ser|
| Leu858Arg|
| Lys768Ile|
| Thr790Met|
| Glu746Ala750del|
所以我最后得到:
| 色谱柱A|
| - -----|
| R790M|
| G724S|
| L858R|
| k768I|
| T790M|
| E746A750del|
不幸的是,这并不像第一个字母那么简单,因为并不是所有的短代码都有第一个字母。
我试过regexp_replace
,但不知道如何用list替换。我不能分离出主字符串的不同部分,替换它们,然后重新组合,因为它们可能超过11个字符,并且有一些3个字符的元素我想保持不变,比如'del'。
可以选择嵌套regexp_replace
函数,但我的完整列表有21个长,所以这看起来很糟糕,我想知道是否有更优雅的方法。
1条答案
按热度按时间1bqhqjot1#
使用递归查询和简单的字符串函数递归遍历子字符串,然后用其缩写替换每个三字符代码(如果存在):
其中,对于样本数据:
输出:
| 柱|
| - -----|
| R790M|
| E746A750del|
| Gly724S|
| L858R|
| K768I|
| T790M|
fiddle
如果你可以使用可变长度的数字分隔符,那么你可以使用
REGEXP_INSTR
来找到每个数字的结尾:其中,对于样本数据:
输出:
| 柱|
| - -----|
| R790M|
| E746A750del|
| Gly724S|
| L858R|
| K1768I|
| 公司简介|
| K768I|
| T790M|
fiddle