从下载的数据中提取 CAS 编号
Extract CAS Number from Downloaded Data
我已经从 Pubchem 下载了一个包含 5000 多条记录的 CSV 文件。其中一列包含一堆计算的同义词,其中 CAS 编号是我希望提取的记录。不幸的是,CAS 编号不一定在此列表中处于相同位置,这使得按分隔符拆分更加困难。下面是源数据示例和我想要实现的期望输出。
前一段时间 post 的较旧答案使用 Regex 函数提取具有给定长度的数字字符串。
fnRegexExtr
let fx=(text,regex)=>
Web.Page(
"<script>
var x='"&text&"';
var y=new RegExp('"®ex&"','g');
var b=x.match(y);
document.write(b);
</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}
in
fx
不确定这是否可行并且不熟悉正则表达式,但我想知道是否可以修改此函数以提取 CAS 编号。难点在于 CAS 编号可以采用多种格式 CAS 编号最长可达 10 位数字,格式为 xxxxxxx-yy-z。
如果有人有任何替代解决方案来使用这种有点复杂的数据提取 CAS 编号,请随时 post。
数据:
cid 和 cmpdname 可以是任何东西。
1-Aminopropan-2-ol|1-AMINO-2-PROPANOL|78-96-6|Isopropanolamine|Monoisopropanolamine
1-chloro-2,4-dinitrobenzene|2,4-Dinitrochlorobenzene|97-00-7|Dinitrochlorobenzene|DNCB|Chlorodinitrobenzene|CDNB
1,2-dichloroethane|Ethylene dichloride|107-06-2|Ethylene chloride|Ethane, 1,2-dichloro-|Glycol dichloride|Dutch liquid|Dutch oil|Ethane dichloride|Aethylenchloride
1,2,4-trichlorobenzene|120-82-1|Benzene, 1,2,4-trichloro-|unsym-Trichlorobenzene|Hostetex L-pec|Trojchlorobenzene
CHLOROACETALDEHYDE|2-chloroacetaldehyde|107-20-0|Chloroethanal|2-Chloroethanal|Acetaldehyde, chloro-|Chloroaldehyde|Monochloroacetaldehyde|2-Chloro-1-ethanal
在 PQ 中,这将拉出任何不包含 cmpdsynonym 中的字母的项目的内容,我认为这基本上就是您要查找的内容
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "Custom.3", each List.RemoveNulls(List.Transform(Text.Split([cmpdsynonym],"|"), each if _ = Text.Remove (_,{"A".."Z","a".."z"}) then _ else null)){0})
in #"Added Custom"
这是在 PQ 中执行此操作的一种方法,使用 fnRegexExtr
到 return CAS;和一个简单的 Text.Split
到 return 化合物名称:
let
//Read in data and set data type as text
Source = Excel.CurrentWorkbook(){[Name="Compounds"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
//Transform to desired output
Result = Table.FromColumns(
{List.Transform(#"Changed Type"[Column1], each Text.Split(_,"|")){0}}
& {List.Transform(#"Changed Type"[Column1],each fnRegexExtr(_, "\b\d{1,7}-\d{2}-\d"))},
type table[Compound=text, CAS=text]
)
in
Result
原创
结果
我已经从 Pubchem 下载了一个包含 5000 多条记录的 CSV 文件。其中一列包含一堆计算的同义词,其中 CAS 编号是我希望提取的记录。不幸的是,CAS 编号不一定在此列表中处于相同位置,这使得按分隔符拆分更加困难。下面是源数据示例和我想要实现的期望输出。
前一段时间 post 的较旧答案使用 Regex 函数提取具有给定长度的数字字符串。
fnRegexExtr
let fx=(text,regex)=>
Web.Page(
"<script>
var x='"&text&"';
var y=new RegExp('"®ex&"','g');
var b=x.match(y);
document.write(b);
</script>")[Data]{0}[Children]{0}[Children]{1}[Text]{0}
in
fx
不确定这是否可行并且不熟悉正则表达式,但我想知道是否可以修改此函数以提取 CAS 编号。难点在于 CAS 编号可以采用多种格式 CAS 编号最长可达 10 位数字,格式为 xxxxxxx-yy-z。
如果有人有任何替代解决方案来使用这种有点复杂的数据提取 CAS 编号,请随时 post。
数据:
cid 和 cmpdname 可以是任何东西。
1-Aminopropan-2-ol|1-AMINO-2-PROPANOL|78-96-6|Isopropanolamine|Monoisopropanolamine
1-chloro-2,4-dinitrobenzene|2,4-Dinitrochlorobenzene|97-00-7|Dinitrochlorobenzene|DNCB|Chlorodinitrobenzene|CDNB
1,2-dichloroethane|Ethylene dichloride|107-06-2|Ethylene chloride|Ethane, 1,2-dichloro-|Glycol dichloride|Dutch liquid|Dutch oil|Ethane dichloride|Aethylenchloride
1,2,4-trichlorobenzene|120-82-1|Benzene, 1,2,4-trichloro-|unsym-Trichlorobenzene|Hostetex L-pec|Trojchlorobenzene
CHLOROACETALDEHYDE|2-chloroacetaldehyde|107-20-0|Chloroethanal|2-Chloroethanal|Acetaldehyde, chloro-|Chloroaldehyde|Monochloroacetaldehyde|2-Chloro-1-ethanal
在 PQ 中,这将拉出任何不包含 cmpdsynonym 中的字母的项目的内容,我认为这基本上就是您要查找的内容
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "Custom.3", each List.RemoveNulls(List.Transform(Text.Split([cmpdsynonym],"|"), each if _ = Text.Remove (_,{"A".."Z","a".."z"}) then _ else null)){0})
in #"Added Custom"
这是在 PQ 中执行此操作的一种方法,使用 fnRegexExtr
到 return CAS;和一个简单的 Text.Split
到 return 化合物名称:
let
//Read in data and set data type as text
Source = Excel.CurrentWorkbook(){[Name="Compounds"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
//Transform to desired output
Result = Table.FromColumns(
{List.Transform(#"Changed Type"[Column1], each Text.Split(_,"|")){0}}
& {List.Transform(#"Changed Type"[Column1],each fnRegexExtr(_, "\b\d{1,7}-\d{2}-\d"))},
type table[Compound=text, CAS=text]
)
in
Result
原创
结果