String Matlab:使用单词列表查找字符串模式,并在文本中替换为列表中的一个单词 Matlab,考虑字符串: str = 'text text text [[word1,word2,word3]] text text' strnew = 'text text text word2 text text'

String Matlab:使用单词列表查找字符串模式,并在文本中替换为列表中的一个单词 Matlab,考虑字符串: str = 'text text text [[word1,word2,word3]] text text' strnew = 'text text text word2 text text',string,matlab,find,String,Matlab,Find,我想随机分离列表中的一个单词'word1'、'word2'、'word3',比如'word2',然后在可能的新文件中写入字符串: str = 'text text text [[word1,word2,word3]] text text' strnew = 'text text text word2 text text' 我的方法如下,当然很糟糕: 隔离字符串“[[word1,word2,word3]]”可以通过 str2=regexp(str,'\[\[(.*?)\]\]','match'

我想随机分离列表中的一个单词'word1'、'word2'、'word3',比如'word2',然后在可能的新文件中写入字符串:

str = 'text text text [[word1,word2,word3]] text text'
strnew = 'text text text word2 text text'
我的方法如下,当然很糟糕:

隔离字符串“[[word1,word2,word3]]”可以通过

str2=regexp(str,'\[\[(.*?)\]\]','match')
str3=str2(3:end-2)
移除管柱中的开启和关闭方括号是通过以下方式实现的:

str2=regexp(str,'\[\[(.*?)\]\]','match')
str3=str2(3:end-2)
最后,我们可以将str3拆分为存储在单元格中的单词列表

ListOfWords = split(str3,',')

它输出{'word1'}{'word2'}{'word3'},我被困在那里。我如何选择其中一个条目并将其插入初始字符串或其副本。。。?请注意,如果有帮助的话,分隔符[[和]]都可以更改为| |。

您可以按如下方式执行:

与“拆分”选项一起使用; 把中间部分分成几个字; 随机选择一个单词; 连接回。
您可以按如下方式进行操作:

与“拆分”选项一起使用; 把中间部分分成几个字; 随机选择一个单词; 连接回。
我有一个可怕的解决办法。我想看看我是否能在一个函数调用中完成它。你可以。。。但代价是什么!像这样滥用动态正则表达式几乎算不上一次函数调用

我使用动态表达式来处理逗号分隔的列表。棘手的部分是选择一个随机元素。这是非常困难的,因为MATLAB的语法不支持函数调用结果的paren索引。为了解决这个问题,我把它放在一个结构中,这样我就可以点索引了。这太可怕了

>> regexprep(str,'\[\[(.*)\]\]',"${struct('tmp',split(string($1),',')).tmp(randi(count($1,',')+1))}")

ans =

    'text text text word3 text text'
Luis肯定有最好的答案,但我认为不使用正则表达式可以稍微简化一下

str = 'text text text [[word1,word2,word3]] text text';                     % input
tmp = extractBetween(str,"[[","]]");                                        % step 1
tmp = split(tmp, ',');                                                      % step 2
chosen_word = tmp(randi(numel(tmp))) ;                                      % step 3
strnew = replaceBetween(str,"[[","]]",chosen_word,"Boundaries","Inclusive") % step 4

我有一个可怕的解决办法。我想看看我是否能在一个函数调用中完成它。你可以。。。但代价是什么!像这样滥用动态正则表达式几乎算不上一次函数调用

我使用动态表达式来处理逗号分隔的列表。棘手的部分是选择一个随机元素。这是非常困难的,因为MATLAB的语法不支持函数调用结果的paren索引。为了解决这个问题,我把它放在一个结构中,这样我就可以点索引了。这太可怕了

>> regexprep(str,'\[\[(.*)\]\]',"${struct('tmp',split(string($1),',')).tmp(randi(count($1,',')+1))}")

ans =

    'text text text word3 text text'
Luis肯定有最好的答案,但我认为不使用正则表达式可以稍微简化一下

str = 'text text text [[word1,word2,word3]] text text';                     % input
tmp = extractBetween(str,"[[","]]");                                        % step 1
tmp = split(tmp, ',');                                                      % step 2
chosen_word = tmp(randi(numel(tmp))) ;                                      % step 3
strnew = replaceBetween(str,"[[","]]",chosen_word,"Boundaries","Inclusive") % step 4

所需的单词是由程序随机选择的,还是程序知道要选择哪个单词?@Luis Mendo由程序随机选择。示例中的文本保证不包含[[或]],对吗?请在问题中澄清这一点description@LuisMendo对问题和请求都是。所需的单词是由程序随机选择的,还是程序知道要选择哪个单词?@Luis Mendo由程序随机选择。您的示例中的文本保证不包含[[或]],对吗?请在问题中澄清这一点description@Luis门多对这个问题和要求都是肯定的。