我可以在一个步骤中编写这个正则表达式吗?
问题描述:
这是输入字符串“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(匹配值)
的问题是,有没有办法只创建一个正则表达式,只有一个代表?即一步完成这项工作?我是一个新的正则表达式,我想学习有效的方式。
答
我想尝试
Regex.Replace(input, @"\s*[+-]\s*", m => " " + m.ToString().Trim() + " ");
+0
Lambda表达式很有趣,但这可以用正则表达式来完成,就像@KennyTM演示的那样。 – 2010-04-07 08:26:29
尼斯的网站,ideone.com! – 2010-04-07 07:38:38
thx,我是一个新的正则表达式,不知道它可以是那么简单 – dontoo 2010-04-07 08:25:20