2010-04-07 36 views
0

这是输入字符串“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(匹配值)

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

回答

6

我在这里没有看到需要寻找代表或代表。只是

" $1 " 

(见http://ideone.com/r3Oog)取代

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

+0

尼斯的网站,ideone.com! – 2010-04-07 07:38:38

+0

thx,我是一个新的正则表达式,不知道它可以是那么简单 – dontoo 2010-04-07 08:25:20

3

我想尝试

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

Lambda表达式很有趣,但这可以用正则表达式来完成,就像@KennyTM演示的那样。 – 2010-04-07 08:26:29

相关问题