【问题标题】:Can I write this regex in one step?我可以一步编写这个正则表达式吗?
【发布时间】: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前后插入“”(匹配值)

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

【问题讨论】:

    标签: c# .net regex replace


    【解决方案1】:

    我认为这里不需要环视或委托。直接替换

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

    " $1 "
    

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

    【讨论】:

    • thx,我是正则表达式的新手,不知道它可以这么简单
    【解决方案2】:

    我会试试的

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

    【讨论】:

    • Lambda 表达式很有趣,但这可以单独使用正则表达式来完成,正如@KennyTM 所展示的那样。
    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 2012-08-28
    相关资源
    最近更新 更多