Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#正则表达式查找自定义标记并获取内容_C#_Regex - Fatal编程技术网

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”;}
,或者只是传递一个命名方法。