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

时间:2010-11-10 09:53:22

标签: c# regex

我有一个字符串:

productDescription

这是一些自定义标签,例如:

[MM][/MM]

例如,字符串可能是:

  

此产品[MM] 1000 [/ MM]长

使用正则表达式如何找到这些MM标签,获取它们的内容并用另一个字符串替换所有内容?例如,输出应为:

  

此产品长10厘米

4 个答案:

答案 0 :(得分:4)

我认为你需要将代理传递给正则表达式。

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";
});

答案 1 :(得分:1)

使用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";

答案 2 :(得分:0)

像这样的正则表达式

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

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

我认为你不能做一个简单的RegEx.Replace,因为你在搜索时不知道替换字符串。

答案 3 :(得分:0)

    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个匹配的数字部分。