Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 检测较大字符串中的大写字母字符串_Matlab - Fatal编程技术网

Matlab 检测较大字符串中的大写字母字符串

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

在matlab中,有没有一种干净的方法可以在较大的字符串中查找长度为2-4的大写字母字符串。例如,假设我有一个字符串

 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.