正则表达式在matlab中处理txt文档
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式在matlab中处理txt文档相关的知识,希望对你有一定的参考价值。
先说点废话~老师在寒假给小弟一个课题,就是在matlab中运用正则表达式来处理txt文档,小弟matlab新手~正则表达式中文资料太少了~英文又太差劲,所以对英文资料只好自动过滤了~摸索了半个多月,删删改改
先介绍下附件1的格式:
[quote]>AB016625
GCGGCCCAGGCCCGGAACCTTCCCTGGTCGTGCG
>AF008216
AAGCTTTCCT[/quote]
题目1:将'>'符号后跟的的字符串(母字符串)提取出来并建立以字符串命名的文件夹(如文件夹ABO16625,文件夹AF008216)
题目2:在相应的文件下建立base.txt
题目3:将母字符串下面的字符串(子字符串)提取出来储存在相应的base.txt里面
这3个题目,小弟摸爬滚打算是做出来了,共享如下:[code]
clc;clear;
file=fopen('fasta.txt','r');
fname=;fname1=;
fbase=;
while feof(file)==0
str=fgetl(file);
fname1=regexpi(str,'(?<=>)[A-Z0-9]+$','match');
fbase=regexpi(str,'^[a-z]+$','match');
if ~isempty(fname1)
mkdir(fname11);
k1=strcat('D:\mat\work\',fname11,'\base.txt');
fname=[fname; fname1];
fname1=;
end
if ~isempty(fbase)
fid1=fopen(k1,'a');
fwrite(fid1,fbase1);
fclose(fid1);
fbase1=;
end
end
fclose('all');
[/code]但是接下来的题目小弟实在困惑不已,望各位指教
先介绍hmrcds格式:
[quote]
AB016625 12 24 35 67
AF008216 12 15
U25134 11 15
[/quote]
题目4:在相应母字符串命名的文件夹下建立cds.txt文档
题目5:将hmrcds中母字符串后的纯数字字符串提取出来存在各自的cds.txt中
题目6:在相应的文件夹中,由cds.txt中储存的偶数个数字为根据,提取出base.txt中的字符串,并储存在由此在相应文件夹下建立的ex1.txt,ex2.txt……中~,例如在AB016625命名的文件夹下,在base.txt中取出12-24的字符串存在ex1.txt,取出35-67的字符串存在ex2.txt中~
是不是看的头大~~~
题目4小弟可以做出来,题目5,小弟用正则表达式实在做不出来,题目6还没做到
另外,小弟今天知道用
f = fopen('fasta.txt','rt'); % t 属性根据需要可省略
x = fread(f,'*char');
fclose(f);
x=x'
可以将文档以字符串形式读入(textread读取后是一个cell格式),于是就用
fname1=regexpi(x,'(?<=>)\w+','match')
来完成题目题目1中的提取母字符串,结果在matlab运行后,不出现结果,同时cpu使用达到50%,不知道怎么回事~大家指点小弟下吧~~~
完整附件的可以百度hi~
52xenos大哥。你给的网址我打不开。。你能否复制下内容发到我邮箱~~
nxhylyh2008@163.com
谢谢先
楼下的大哥,你们的教材我都有了~~看过10遍有了。。哎
greadju大哥,我已发邮件~~~
f = fopen('fasta.txt','r');
x = fread(f,'*char');
fclose(f);
x=x';
[st,ed,mh]=regexp(x,'(?<=>)\S*','start','end','match');
st=[st,length(x)+3];
for n=1:length(ed)
mkdir(mhn);
f=fopen([mhn '\base.txt'],'w');
fwrite(f,x(ed(n)+3:st(n+1)-3));
fclose(f);
end
4-6
f = fopen('hmrcds.txt','r');
x = fread(f,'*char');
fclose(f);
x=x';
[st,ed,mh]=regexp(x,'\<[A-Z]\w*','start','end','match');
st=[st,length(x)+2];
for n=1:length(ed)
f=fopen([mhn '\cds.txt'],'w');
g=fopen([mhn '\base.txt'],'r');
y=regexp(x(st(n):st(n+1)-2),'\<\d+','match');
z=fread(g);
z=char(z');
for m=1:length(y)/2
fwrite(f,[y2*m-1 ' ' y2*m ' ']);
h=fopen([mhn '\ex' num2str(m) '.txt'],'w');
fwrite(h,z(str2num(y2*m-1):str2num(y2*m)));
fclose(h);
end
fclose(f);
fclose(g);
end 参考技术A 看看这个教程:
Matlab 正则表达式零基础起步教程
http://www.caesv.cn/html/kexuejisuan/MatLabjiaocheng/2009/1105/6404.html 参考技术B 你运气太好了,呵呵
看看这个matlab中正则表达式教程
http://52xenos.blogspot.com/2010/02/matlab_04.html 参考技术C scz
求notepad正则表达式。
txt格式文件如下:
propulsion
n. 推进力
expulsion
n. 驱逐,开除
revulsion
n. 收回,反感
删除后的效果为:
propulsion
expulsion
revulsion
将上句拷贝到文本文件中,另存为BAT文件,test.txt中放入你需要处理的内容,或把test.txt换成你要处理的文本文件,记得要处理的文件与BAT文件要放在同一目录下,比如桌面上,双击BAT文件,test1.txt中就是处理后的文件 参考技术A 1、去除中文解释
查找
^n\..+$
替换成空
2、去除空行
查找
\n2,
替换成
\n追问
第二个去除空行不行,提示找不到。
参考技术B 你的要处理的文本文件名字是test.txt吗,要处理的文件与bat文件在同一目录吗以上是关于正则表达式在matlab中处理txt文档的主要内容,如果未能解决你的问题,请参考以下文章