在matlab中,有没有一种既好又干净的方法可以在一个较大的字符串中找到长度为2-4的大写字母串。例如,假设我有一个字符串...
stringy = 'I imagine I could FLY';有没有一种很好的方法来提取字符串的FLY部分?目前,我使用in ()函数来标识字符串中的所有大写字符,如下所示……
for count = 1:length(stringy)
if upper(stringy(count))==stringy(count)
isupper(count)=1;
else
isupper(count)=0;
end
end然后,我只需遍历二进制向量,并确定该行中何时有2-41个1。
这个方法是有效的。但我想知道有没有更干净的方法来做这件事...谢谢!
发布于 2012-01-24 12:12:54
为此,您可以使用正则表达式。正则表达式[A-Z]{2,4}将在字符串中搜索2-4个大写字母。
相应的matlab函数称为regexp。
regexp(string,pattern)将它与pattern匹配的所有位置的子索引返回到string。
对于你的模式,我有两个建议:
\<[A-Z]{2,4}\>.这将搜索由2-4个大写字母组成的整个单词(因此它不会获取下面的TOUCH ):stringy =‘我想象我可以飞起来触摸天空’;regexp(stringy,'\') %return 19,33,37 (' FLY ',' THE ','SKY')
( Matlab编辑:Matlab使用\<和\>来表示单词边界,而不是标准Matlab中可以混合大小写的字符串,并且您想要提取它们,请尝试(?<![A-Z])[A-Z]{2,4}(?![A-Z]) (意思是"2-4个不用大写字母括起来的大写字母“):
stringy = 'I image I and‘;%return 17和28 ('FLY','THE') regexp(stringy,'(?<)A-Z{2,4}(?)') % note '\’不匹配此处的任何内容,因为它查找%*个大写字母组成的%*个完整单词*。% 'FLYandTouchTHEsky‘不满足这一点。
根据您希望发生的行为选择正则表达式。
https://stackoverflow.com/questions/8981808
复制相似问题