C#正则表达式查找自定义标记并获取内容
我有一个字符串:C#正则表达式查找自定义标记并获取内容,c#,regex,C#,Regex,我有一个字符串: productDescription 其中包含一些自定义标记,例如: [MM][/MM] 例如,字符串可能为: 此产品的长度为[MM]1000[/MM] 使用正则表达式如何找到这些MM标记,获取它们的内容并用另一个字符串替换所有内容?例如,输出应为: 这个产品有10厘米长 使用: 使用System.Text.regular表达式; //C的正则表达式替换代码# void ReplaceRegex() { //正则表达式搜索和替换 RegexOptions选项=RegexOp
productDescription
其中包含一些自定义标记,例如:
[MM][/MM]
例如,字符串可能为:
此产品的长度为[MM]1000[/MM]
使用正则表达式如何找到这些MM标记,获取它们的内容并用另一个字符串替换所有内容?例如,输出应为:
这个产品有10厘米长
使用:
使用System.Text.regular表达式;
//C的正则表达式替换代码#
void ReplaceRegex()
{
//正则表达式搜索和替换
RegexOptions选项=RegexOptions.None;
Regex Regex=new Regex(@“\[MM\]”(?.*\[\/MM\]”,选项);
字符串输入=@“[MM]1000[/MM]”;
字符串替换=@“10厘米”;
字符串结果=regex.Replace(输入,替换);
//TODO:做一些有结果的事情
System.Windows.Forms.MessageBox.Show(结果,“替换”);
}
或者,如果要将原始文本返回到替换中:
Regex regex = new Regex(@"\[MM\](?<theText>.*)\[\/MM\]", options);
string replacement = @"${theText} cm";
Regex Regex=new Regex(@“\[MM\]”(?.*)\[\/MM\]”,选项);
字符串替换=@“${theText}cm”;
使用:
使用System.Text.regular表达式;
//C的正则表达式替换代码#
void ReplaceRegex()
{
//正则表达式搜索和替换
RegexOptions选项=RegexOptions.None;
Regex Regex=new Regex(@“\[MM\]”(?.*\[\/MM\]”,选项);
字符串输入=@“[MM]1000[/MM]”;
字符串替换=@“10厘米”;
字符串结果=regex.Replace(输入,替换);
//TODO:做一些有结果的事情
System.Windows.Forms.MessageBox.Show(结果,“替换”);
}
或者,如果要将原始文本返回到替换中:
Regex regex = new Regex(@"\[MM\](?<theText>.*)\[\/MM\]", options);
string replacement = @"${theText} cm";
Regex Regex=new Regex(@“\[MM\]”(?.*)\[\/MM\]”,选项);
字符串替换=@“${theText}cm”;
我认为您需要为此向正则表达式传递一个委托
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";
});
我想你需要向正则表达式传递一个委托
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";
});
像这样的正则表达式
\[(\w+)\](\d+)\[\/\w+\]
将查找并收集单位(如MM)和值(如1000)。这至少允许您智能地使用零件对进行转换。然后,您可以将替换字符串放在一起,并进行简单的字符串替换,因为您知道要替换的确切字符串
我认为你不能做一个简单的RegEx.Replace,因为你在搜索时不知道替换字符串。像这样的RegEx
\[(\w+)\](\d+)\[\/\w+\]
Regex rex = new Regex(@"\[MM\]([0-9]+)\[\/MM\]");
string s = "This product is [MM]1000[/MM] long";
MatchCollection mc = rex.Matches(s);
将查找并收集单位(如MM)和值(如1000)。这至少允许您智能地使用零件对进行转换。然后,您可以将替换字符串放在一起,并进行简单的字符串替换,因为您知道要替换的确切字符串
我认为你不能做一个简单的RegEx.Replace,因为你在搜索时不知道替换字符串
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个匹配的数字部分
将只匹配整数
mc[n].Groups[1].Value;
然后将给出第n个匹配的数字部分。我认为这需要的不仅仅是正则表达式。
[M]1000[/M]
应该呈现什么1km
?我很好地编写了所有转换的内容,只需要了解如何实际获取标签的内容并替换它。我认为这需要的不仅仅是一个正则表达式。[M]1000[/M]
应该呈现什么1km
?我很好地编写了所有转换内容,只需要了解如何实际获取标签内容并替换它。谢谢!出于好奇,@symbole表示什么?我还需要获取标记之间的值,我该怎么做?您的示例是为我的示例而硬编码的。这意味着编译器不会尝试使用转义序列(如\r\n等)来翻译字符串。@Tom-see-这是一个“逐字字符串”,其中\char不作为转义。谢谢!出于好奇,@symbole表示什么?我还需要获取标记之间的值,我该怎么做?您的示例是为我的示例而硬编码的。这意味着编译器不会尝试使用转义序列(如\r\n等)来翻译字符串。@Tom-see-这是一个“逐字字符串”,其中\char不充当转义。太棒了。我从来不知道有一个版本的Regex.Replace接受了委托。更现代的语法应该是match=>{/*…*/return“something”;}
,或者只是传递一个命名的方法。我从来不知道有一个版本的Regex.Replace接受了委托。更现代的语法应该是match=>{/*…*/return“something”;}
,或者只是传递一个命名方法。