正则表达式中的替换和替换模式

时间:2015-09-24 17:49:49

标签: c# regex

我花了4个小时在这上面,但我仍然不清楚这应该如何运作。 我想使用来自this链接的逻辑。我想改造

Some123Grouping TO GroupingSome123

我有3个部分,应该使用替换($ 1,$ 2,$ 3)更改订单 我还需要一些东西来改造

name@gmail.com TO name

我不清楚如何定义替换以及在我的情况下捕获的内容?

感谢您的帮助,我会继续欣赏它。

3 个答案:

答案 0 :(得分:2)

$ 1,$ 2等指团体(即其声明外观的索引)。因此,您需要在捕获正则表达式中定义组。您可以使用括号来完成此操作。例如:

Regex.Replace("Some123Grouping", @"(Some)(123)(Grouping)", @"$3$1$2")

产生" GroupingSome123"。

请注意,为了更好的可读性,还可以命名组,然后按名称引用组。例如:

Regex.Replace("mr.smith@gmail.com", @"(?<name>.*)(@gmail.com)", @"${name}")

收益&#34; mr.smith&#34;。

顺便说一句,如果您正在寻找一般(非.NET特定但很棒)的Regexes介绍,我建议Regular-Expressions.info

答案 1 :(得分:1)

只需使用您的要求产量

Regex.Replace("name@gmail.com", @"(name)(@gmail.com)", @"$1")

但我怀疑你想要的更多是

Regex.Replace("name@gmail.com", @"(\w*)(@.*)", @"$1")

答案 2 :(得分:1)

如果我理解正确:

文字的模式,其次是数字,然后是文字,如果这是正确的,则应符合您的模式:

string pattern = @"([A-Za-z]+)(\d+)([A-Za-z]+)";

下一步就是让小组出局:

Regex rx = new Regex(pattern);
var match = rx.Match(input);

然后您的结果可以通过两种方式获得,简短版本:

result = rx.Replace(input, "$3$1$2");

长版:

using System;               
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
      string input = "Some123Grouping";
      string pattern = @"([A-Za-z]+)(\d+)([A-Za-z]+)";

      Regex rx = new Regex(pattern);
      var match = rx.Match(input);

      Console.WriteLine("{0} matches found in:\n   {1}", 
                          match.Groups.Count, 
                          input);
      var newInput = "";
      for(int i= match.Groups.Count;i>0;i--){
        newInput +=  match.Groups[i];              
      }
      Console.WriteLine(newInput);
    }
}

关于你的第二个问题,它似乎很简单:

var result ="name@gmail.com".Split('@')[0];