【问题标题】:Detect specific number using regexp使用正则表达式检测特定数字
【发布时间】:2014-04-28 10:12:18
【问题描述】:

任何想法如何检测 (>3

"<span data-bind-domain="rank_value_3_months">3</span>" 



rank(i) = str2double(regexp(CharData7,'>(\d)<','match','once'))

这是我这部分的全部代码,我想在 pre-prosses 文件之后检测 (>number

%function [feature7] = f7(data)

for i = 1:1

%start read html file
data2=fopen(strcat('DATA\WHOIS\TR\',int2str(i),'.htm'),'r')
CharData = fread(data2, '*char')';  %read text file and store data in CharData
fclose(data2);
%end read html file

register_date = regexp(CharData, '<span data-bind-   domain="rank_value_3_months">.*?/span>', 'match'); %checking

%start write only http in image file
fid = fopen(strcat('DATA\PRE-PROCESS_DATA\F23_TR\f23_TR_pdata_',int2str(i)),'w');
for col = 1:numel(register_date)
 fprintf(fid,'%s\n',register_date{:,col});
end
fclose(fid);
%end write only http in image file

s = dir(strcat('DATA\PRE-PROCESS_DATA\F23_TR\','f23_TR_pdata_', int2str(i)));
disp(s.bytes); 

if s.bytes ~= 0

   data7=fopen(strcat('DATA\PRE-PROCESS_DATA\F23_TR\f23_TR_pdata_',int2str(i),''),'r')

   CharData7 = fread(data7, '*char')';  %read text file and store data in CharData
   fclose(data7);

  rank(i) = str2double(regexp(CharData7,'>(\d)<','tokens','once') )

  else

  end

  if rank(i)~=0
   feature23(i)=-1;
  else
   feature23(i)=1;
  end
  end

【问题讨论】:

  • 您的regexp(CharData7,'&gt;(\d)&lt;','match','once') 已经返回'&gt;3&lt;'。有什么问题?
  • 但我得到的输出为“nan nan nan ...”我无法像 (3) 那样得到正确的输出,我希望输出返回我 rank =[3]

标签: regex string matlab


【解决方案1】:

假设CharData7 是一个元胞数组,你可以试试这个:

%// The find 
%// - use 'tokens' to return just the part in brackets
%// - use \s* to make spacing flexible (which is also valid XML/HTML)
rank = regexp(CharData7, '>\s*(\d)\s*<', 'tokens', 'once');

%// Re-format into flat cells 
%// ('tokens' returns ALL tokens, which is therefore a cell, regardless
%// of the 'once' setting)
rank = [rank{:}];

%// and convert everything to double
rank(i) = str2double(rank)

所以,在一个很好的难以辨认的单行中:

rank(i) = str2double([builtin('_brace', regexp(C,'>\s*(\d)\s*<','tokens','once'), :)]);

如果CharData7 只是一个字符串,您可以跳过单元格展平步骤:

 rank(i) = str2double( regexp(C,'>\s*(\d)\s*<','tokens','once') )

【讨论】:

  • @user3340270:在我的测试中,这是正确的,所以你的代码中有其他东西把事情搞砸了。您能否发布一个我可以用来重现问题的字符串和循环的最小示例?
  • @user3340270:另外,你的 MATLAB 版本是多少?
  • 嗨@Rody,我已经发布了我的问题的一部分,我使用了matlab版本:MATLAB 7.7.0(R2008b)
  • @user3340270:谢谢。您还可以发布您正在阅读的 HTM 文件的示例吗?
  • 我的 .htm/code 文件太长,但我从这个链接 (who.is/whois/google.com.my) 保存。这是我保存下来的页面。
猜你喜欢
  • 2021-12-16
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
相关资源
最近更新 更多