Matlab 检测较大字符串中的大写字母字符串
在matlab中,有没有一种干净的方法可以在较大的字符串中查找长度为2-4的大写字母字符串。例如,假设我有一个字符串Matlab 检测较大字符串中的大写字母字符串,matlab,Matlab,在matlab中,有没有一种干净的方法可以在较大的字符串中查找长度为2-4的大写字母字符串。例如,假设我有一个字符串 stringy = 'I imagine I could FLY'; 有没有一种很好的方法来提取字符串的FLY部分?目前,我正在使用upper()函数来识别字符串中的所有大写字符,如下所示 for count = 1:length(stringy) if upper(stringy(count))==stringy(count) isupper
stringy = 'I imagine I could FLY';
有没有一种很好的方法来提取字符串的FLY部分?目前,我正在使用upper()函数来识别字符串中的所有大写字符,如下所示
for count = 1:length(stringy)
if upper(stringy(count))==stringy(count)
isupper(count)=1;
else
isupper(count)=0;
end
end
然后,我将通过二进制向量,确定
这一排有2-4个1
这种方法是有效的。。。但我想知道是否有更干净的方法
做这件事。。。谢谢 您可以为此使用正则表达式。正则表达式
[A-Z]{2,4}
将在字符串中搜索2-4个大写字母
调用相应的matlab函数
regexp(string,pattern)
将子索引返回到它匹配的所有位置的string
对于您的模式,我有两个建议:
\
。这将搜索由2-4个大写字母组成的整个单词(因此它不会抓取下面的TOUCH
):
根据您希望发生的行为选择正则表达式。您可以使用正则表达式。正则表达式
[A-Z]{2,4}
将在字符串中搜索2-4个大写字母
调用相应的matlab函数
regexp(string,pattern)
将子索引返回到它匹配的所有位置的string
对于您的模式,我有两个建议:
\
。这将搜索由2-4个大写字母组成的整个单词(因此它不会抓取下面的TOUCH
):
根据您希望发生的行为选择正则表达式。这可能有助于<祝你好运。这可能会有帮助<祝你好运。看来它会很好用的!谢谢一个问题。。。当我尝试第1点中的方法时,我得到了一个空输出。为什么会这样?(我的意思是我使用了你在控制台上做的两个语句)嗯,事实证明Matlab使用
\
作为单词边界,而不是\b
,我会更新我的答案(octave使用更标准的“\b”…)完美,谢谢!因此,这种方法将返回大写字母部分开头的索引,但不会指示它是由2、3或4个大写字母组成的字符串,对吗?我在上面的澄清中已经解释清楚了。如果您从regexp返回两个参数(即[ab]=regexp…),那么第一个参数集将指示大写字母字符串的起始位置,第二个参数集将指示其结束位置。这看起来将非常有效!谢谢!一个问题……当我尝试第#1点中的方法时,我得到一个空输出。为什么会这样?(我的意思是我使用了你在控制台上做的两个语句)嗯,事实证明Matlab使用\
作为单词边界,而不是\b
,我将更新我的答案(octave使用更标准的“\b”…)太好了,谢谢!所以这种方法将返回大写字母部分开头的索引,但不会指明它是由2、3或4个大写字母组成的字符串,对吗?我已经明白了我上面的解释。如果您返回两个参数(即[a b]=regexp…从regexp开始,第一组将指示大写字母字符串的起始位置,第二组将指示其结束位置。
stringy = 'I imagine I could FLY and TOUCH THE SKY';
regexp(stringy,'\<[A-Z]{2,4}\>') % returns 19, 33, 37 ('FLY','THE','SKY')
stringy = 'I image I could FLYandTouchTHEsky';
% returns 17 and 28 ('FLY', 'THE')
regexp(stringy,'(?<![A-Z])[A-Z]{2,4}(?![A-Z])')
% note '\<[A-Z]{2,4}\>' wouldn't match anything here since it looks for
% *whole words* that consist of 2-4 capital letters only.
% 'FLYandTouchTHEsky' doesn't satisfy this.