我有一个字符串:
productDescription
这是一些自定义标签,例如:
[MM][/MM]
例如,字符串可能是:
此产品[MM] 1000 [/ MM]长
使用正则表达式如何找到这些MM标签,获取它们的内容并用另一个字符串替换所有内容?例如,输出应为:
此产品长10厘米
答案 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)
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个匹配的数字部分。