我可以一步编写这个正则表达式吗?

时间:2010-04-07 07:24:18

标签: c# .net regex replace

这是输入字符串“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(匹配值)之前和之后插入“”

问题是,有没有办法只创建一个正则表达式和一个代表?即一步完成这项工作?我是正则表达式的新手,我想学习有效的方法。

2 个答案:

答案 0 :(得分:6)

我认为这里不需要外观或代表。只需替换

\s*([-+])\s*

" $1 "

(见http://ideone.com/r3Oog。)

答案 1 :(得分:3)

我试试

Regex.Replace(input, @"\s*[+-]\s*", m => " " + m.ToString().Trim() + " ");
相关问题