Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
String MATLAB:简单字符串分析-查找位置_String_Matlab_Datatable_Find_Location - Fatal编程技术网

String MATLAB:简单字符串分析-查找位置

String MATLAB:简单字符串分析-查找位置,string,matlab,datatable,find,location,String,Matlab,Datatable,Find,Location,这里我有一篇文献的例子,我想对它做一个简单的分析。请注意不同的部分: str = "Random info - at beginning-man. "+ ... "Random info still continues. "+ ... "CHAPTER 1. " + ... "Random info in middle one, "+ ... &qu

这里我有一篇文献的例子,我想对它做一个简单的分析。请注意不同的部分:

str =   "Random info - at beginning-man. "+ ...
        "Random info still continues. "+ ...
        "CHAPTER 1. " + ...
        "Random info in middle one, "+ ...
        "Random info still continues. "+ ...
        "1 This is sentence one of verse one, "+ ...
        "This still sentence one of verse one. "+ ...
        "2 This is sentence one of verse two. "+ ...
        "This is sentence two of verse two. "+ ...
        "3 This is sentence one of verse three; "+ ...
        "this still sentence one of verse three. "+ ...
        "CHAPTER 2. " + ...
        "Random info in middle two. "+ ...
        "Random info still continues. "+ ...
        "1 This is sentence four? "+ ...
        "2 This is sentence five, "+ ...
        "3 this still sentence five but verse three!"+ ...
        "Random info at end's end."+ ...
        "Random info still continues. ";
我感兴趣的是,所有数据都可以被称为“中间的随机信息”,在章节名称之后,在诗句开始之前

我想使用函数“extractBetween”来提取在“CHAPTER#”和“1”(第一节)之间找到的信息

我知道如何使用函数“extractBetween”,但对于任何数量的章节,如何确定“CHAPTER#”之前和“1”(第一节)之后的位置

最后,我想给出这样一个答案,其中每个章节的随机信息分配在一个表中:

我尝试了regexp()和findstr(),但没有成功。
一切帮助都将不胜感激。谢谢

可以使用正则表达式与匹配文本

[tokens, matches] = regexp(str, '(CHAPTER \d)\.\s*(.*?)1', 'tokens', 'match');

for k = 1:numel(tokens)
    fprintf('%s\t%s\n', tokens{k}(1), tokens{k}(2)); 
    % or: fprintf('%s\t%s\n', tokens{k}); 
end
将打印

CHAPTER 1   Random info in middle one, Random info still continues. 
CHAPTER 2   Random info in middle two. Random info still continues. 
要解释正则表达式
(第\d章)\.\s*(.*)1

  • (CHAPTER\d)
    将CHAPTER与任何数字匹配,并且围绕它的()括号将捕获
    标记
    变量中的匹配项
  • \。
    与句点匹配
  • \s*
    匹配任何可能的空白
  • (.*)1
    将捕获任何文本,直到文本中的下一个1。请注意问号,使其匹配lazy,否则它将匹配所有文本,直到
    str
    中的最后一个1

删除之前相同的问题不会使发布重复的问题变得正常!正如我几小时前评论的那样。。。请不要在前面的问题上发表完全相同的内容-我认为限制你回答的问题是你的问题太广泛了。如果你能把这归结为你面临的基本问题,那么你要么能解决它们,要么能让我们更容易解决。包括一个(注意最少),为什么它不起作用,你不明白的具体内容。您要求的是一个相当通用的文本解析器,这是一个项目,而不是一个简短的问题,我有一个类似的问题,但不是重复的。Stackoverflow将其标记为“重复”(可能是因为我使用了相同的字符串(str),如上所示),但用于不同的问题。我无法摆脱被标记为“重复”的问题,而不是,因此我需要删除这两个问题,并决定只问上面的一个问题。谢谢你的建议。再次感谢你。就一个简单的问题。如果一个章节没有“随机中间信息”会怎么样?例如,当我删除
“第1章”+…
之后的两行代码时,我遇到了问题。请告诉我您是否希望我打开一个新问题?