2016-09-25 72 views
0

我想在Matlab中开发基于规则的字符串编辑功能。基于Matlab中的规则有选择地编辑字符串

想我已经生成像绳子以下:

myString = '/+*43/*/+34/5*2/*' 

此外,假设我希望能按照一套规则来删除某些数学运算符:

  1. 的字符串不能与启动'*'或'/'运算符
  2. 一个字符串不能以任何运算符结束
  3. 任何顺序运算符都被该序列中的第一个运算符È除非它违反了1和2

因此,例如,上面的字符串将减少到:

myNewString = '+43/34/5*2' 

任何方法是细来解决这个问题,但在向量化布尔方法将是优选的。

我想用这个字符串做的事情是能够对它执行str2num并让它返回一个值而不是抛出错误。

谢谢!

+0

正则表达式可能会是一个很好的途径去探索。 – excaza

回答

1

正则表达式可以用在这里:

myString = '/*+*43/*/+34/5*2/*'; 
myString = regexprep(myString,'^[/*]+',''); % accomplish the rule #1 
myString = regexprep(myString,'[/*+-]+$',''); % accomplish the rule #2 
myString = regexprep(myString,'[/*+-]{2,}','${$0(1)}') % accomplish the rule #3 
+0

谢谢! 这是优雅的。 我试图使用正则表达式在excaza中使用while循环和空集替换的方法,但这更简单。 似乎有很多要学习正则表达式! –