【问题标题】:matlab regexprep replace nth occurencematlab regexprep 替换第 n 次出现
【发布时间】:2018-11-08 05:49:43
【问题描述】:

Matlab 文档指出,可以替换 regexprep 中第 N 次出现的模式。我看不到如何实现它,谷歌没有返回任何有用的东西。

http://www.weizmann.ac.il/matlab/techdoc/ref/regexprep.html

基本上,我拥有的字符串是:,:,1,我想用任意数字替换第二次出现的 :。根据文档:

regexprep(':,:,4',':','AnyNumber','N')

我不明白应该如何使用 N 选项。我试过'N',2或只是'2'。

注意 : 的位置可以在任何地方。

我知道除了 regexprep 之外还有其他方法可以做到这一点,但我不喜欢问题一直存在。

感谢您的帮助!

【问题讨论】:

  • 您使用哪个版本?检查help regexprep,也许是版本依赖?!我用八度,不能用这个特殊选项

标签: regex matlab


【解决方案1】:
regexprep(':,:,4',':','AnyNumber',2)

以上工作。

【讨论】:

  • 如果您知道要修复的字符串的格式,您可以例如:s=':,:,4'; s(3)='9'; 不涉及正则表达式
  • 就像我说的,有很多方法可以完成上述任务。你的方法就是其中之一。
【解决方案2】:

根据 MA​​TLAB 文档,regexprep 的一般语法是:

newStr = regexprep(str,expression,replace,option1,...optionM);

它在“str”中查找,找到匹配的“expression”,并将匹配的字符串替换为“replace”。有 9 个可用选项。其中八个是固定字符串,一个是整数。整数告诉要替换哪个匹配字符串。 以下代码将所有参数设置为变量,查找匹配字符串的数量,并使用该信息仅替换最后一次出现。

str = ':,:,4'; 
expression= ':';
replace = num2str(floor(rand()*10)); 
                               % generate a single digit random number converted to string
idx = regexp(str, expression); % use regexp to find the number of matches
regexprep(str, expression, replace, length(idx)); % only replace the last one

【讨论】:

  • 请解释你的答案——纯代码的答案可能很难让人们使用
  • Kai,您的问题已通过答案中的新编辑得到解决。
猜你喜欢
  • 1970-01-01
  • 2018-09-08
  • 2011-03-05
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 2018-03-24
  • 2011-08-17
  • 1970-01-01
相关资源
最近更新 更多