代码之家  ›  专栏  ›  技术社区  ›  Tom Gullen

C#正则表达式以查找自定义标记并获取内容

  •  0
  • Tom Gullen  · 技术社区  · 13 年前

    productDescription
    

    其中有一些自定义标记,例如:

    [MM][/MM]
    

    例如,字符串可能读取:

    这个产品有[MM]1000[/MM]长

    这个产品有10厘米长

    4 回复  |  直到 13 年前
        1
  •  4
  •   Michael Low    13 年前

    我想你需要给regex传递一个委托。

    Regex theRegex = new Regex(@"\[MM\](\d+)\[/MM\]");
    text = theRegex.Replace(text, delegate(Match thisMatch)
    {
    
        int mmLength = Convert.ToInt32(thisMatch.Groups[1].Value);
        int cmLength = mmLength / 10;
        return cmLength.ToString() + "cm";
    });
    
        2
  •  1
  •   Peter Mortensen John Conde    13 年前

    使用 RegexDesigner.NET

    using System.Text.RegularExpressions;
    
    // Regex Replace code for C#
    void ReplaceRegex()
    {
        // Regex search and replace
        RegexOptions   options = RegexOptions.None;
        Regex          regex = new Regex(@"\[MM\](?<value>.*)\[\/MM\]", options);
        string         input = @"[MM]1000[/MM]";
        string         replacement = @"10 cm";
        string         result = regex.Replace(input, replacement);
    
        // TODO: Do something with result
        System.Windows.Forms.MessageBox.Show(result, "Replace");
    }
    

    或者,如果您希望原始文本返回到替换中:

    Regex          regex = new Regex(@"\[MM\](?<theText>.*)\[\/MM\]", options);
    string         replacement = @"${theText} cm";
    
        3
  •  0
  •   Will Dean    13 年前

    像这样的正则表达式

    \[(\w+)\](\d+)\[\/\w+\]
    

    将查找并收集单位(如MM)和值(如1000)。这至少可以让您智能地使用这对部件来进行转换。然后,您可以将替换字符串放在一起,并执行简单的字符串替换,因为您知道要替换的确切字符串。

        4
  •  0
  •   El Ronnoco    13 年前
        Regex rex = new Regex(@"\[MM\]([0-9]+)\[\/MM\]");
    
        string s = "This product is [MM]1000[/MM] long";
    
        MatchCollection mc = rex.Matches(s);
    

    只匹配整数。

        mc[n].Groups[1].Value;
    

    然后给出第n个匹配的数字部分。