【发布时间】:2010-04-07 07:24:18
【问题描述】:
这是输入字符串“23x +y-34 x + y+21x - 3y2-3x-y+2”。我想用空格包围每个“+”和“-”字符,但前提是它们没有从左侧或右侧包围。所以我的输入字符串看起来像这样“23x + y - 34 x + y + 21x - 3y2 - 3x - y + 2”。我写了这段代码来完成这项工作:
Regex reg1 = new Regex(@"\+(?! )|\-(?! )");
input = reg1.Replace(input, delegate(Match m) { return m.Value + " "; });
Regex reg2 = new Regex(@"(?<! )\+|(?<! )\-");
input = reg2.Replace(input, delegate(Match m) { return " " + m.Value; });
解释: reg1 // 匹配 '+' 后跟任何不是 ' ' 的字符(空格)或与 '-' 相同的字符
reg2 // 相同的只是我匹配 '+' 或 '-' 而不是前面有 ' '(空格)
委托1和2只是在m.Value前后插入“”(匹配值)
问题是,有没有办法只创建一个正则表达式和一个委托?即一步完成这项工作?我是正则表达式的新手,我想学习有效的方法。
【问题讨论】: