我试图在文本文件中检索字符串的特定部分,如下所示,我想将它们保存在MATLAB的文本文件中
原始文本文件
D 1m8ea_ 1m8e A: d.174.1.1 74583 cl=53931,cf=56511,sf=56512,fa=56513,dm=56514,sp=56515,px=74583
D 1m8eb_ 1m8e B: d.174.1.1 74584 cl=53931,cf=56511,sf=56512,fa=56513,dm=56514,sp=56515,px=74584
D 3e7ia1 3e7i A:77-496 d.174.1.1 158052 cl=53931,cf=56511,sf=56512,fa=56513,dm=56514,sp=56515,px=158052
D 3e7ib1 3e7i B:77-496 d.174.1.1 158053 cl=53931,cf=56511,sf=56512,fa=56513,dm=56514,sp=56515,px=158053
D 2bhja1 2bhj A:77-497 d.174.1.1 128533 cl=53931,cf=56511,sf=56512,fa=56513,dm=56514,sp=56515,px=128533
所以基本上,我想检索标记为"1m8e"
的pdbcodes id,标记为"A"
的chainid为"77"
的起始值,并且停止值为{{1我希望所有这些值都保存在fprintf语句中。
是否有某种方法可以在RegExp中使用,说明它的所有索引都是从哪个索引开始并根据文本文件中每行的位置检索这些字符串?
最后,我想在fprinf语句中拥有"496"
。
到目前为止,我有两个1m8e, A, 77, 496
函数读取一个文件,一个写入一个新文件并逐行读取,也是一个fopen
语句:
fprintf
谢谢。
答案 0 :(得分:2)
你应该能够在空格上strsplit,得到第三个(“1m8e”)和第四个元素(“A:77-496”),然后使用“:”作为第四个元素的重复过程拆分字符,然后再使用“ - ”作为拆分字符在这两个参数中的第二个。这是一种方法。例如,你可以这样做:
% split on space and tab, and ignore empty tokens
tokens = strsplit(line, ' \t', true);
pdbcode = tokens(3);
% split fourth token from previous split on colon
tokens = strsplit(tokens(4), ':');
chainid = tokens(1);
% split second token from previous split on dash
tokens = strsplit(tokens(2), '-');
start = tokens(1);
stop = tokens(2);
如果您真的想使用regular expressions,可以尝试以下
pattern = '\S+\s+\S+\s+(\S+)\s+([A-Za-z]+):([0-9]+)-([0-9]+)';
[mat tok] = regexp(line, pattern, 'match', 'tokens');
pdbcode = cell2mat(tok)(1);
chainid = cell2mat(tok)(2);
start = cell2mat(tok)(3);
stop = cell2mat(tok)(4);