4

我的时间很短,特别想提取一个像下面这样的字符串。问题是标签不是形式的<a> data </a>

鉴于,

s = <em style="font-size:medium"> 5,888 </em>

如何在 matlab 中仅提取 5,888 个?

4

2 回答 2

3

您会在此处、或此处此处找到有用的信息,所有这些都是 google-first-page 的结果,并且会比在这里提问更快。

无论如何,快速-'n-dirty方式:您可以过滤<>符号:

>> s = '<em style="font-size:medium"> 5,888 </em> <sometag> test </sometag>'    
>> a = regexp(s, '[<>]');    
>> s( cell2mat(arrayfun(@(x,y)x:y, a(2:2:end-1)+1, a(3:2:end)-1, 'uni',false)) )

ans = 

   5,888 test

或者,更健壮和更简洁,将任何标签(包括标签)之间的所有内容替换为空:

>> s = regexprep(s, '<.*?>', '')
ans = 

   5,888 test
于 2012-11-05T06:52:33.367 回答
3

谢谢大家的帮助。我基本上是想在 Matlab 上获取美国某个县的人口。以为我会分享我的代码,虽然不是最优雅的。可能会帮助一些灵魂。:)

county = 'morris';
state = 'ks';

county = strrep(county, ' ' , '+');
str = sprintf('https://www.google.com/search?&q=population+%s+%s',county,state);
s = urlread(str);
pop = regexp(s,'<em[^>]*>(.*?)</em>', 'tokens');
pop = char(pop{:});
pop = strrep(pop, ',' , '');
pop = str2num(pop);
于 2012-11-05T08:26:29.420 回答