C# 简化正则表达式

C# 简化正则表达式,c#,regex,C#,Regex,我对正则表达式不是很熟悉,一直试图将下面的问题简化为一个表达式。第一个示例将始终具有{Container:},第二个示例将始终具有{Container:randomname Running·random GPM·randomitem},并且运行也可能脱机并停止 问题1: 表达我想缩小范围: {容器:Jake} 所需正则表达式。替换结果:“Jake” 当前解决方案: String test = {Container: Jake} Regex.Replace(test.ToString(), "{C

我对正则表达式不是很熟悉,一直试图将下面的问题简化为一个表达式。第一个示例将始终具有{Container:},第二个示例将始终具有{Container:randomname Running·random GPM·randomitem},并且运行也可能脱机并停止

问题1:

表达我想缩小范围: {容器:Jake}

所需正则表达式。替换结果:“Jake”

当前解决方案:

String test = {Container: Jake}
Regex.Replace(test.ToString(), "{Container:", "");
Regex.Replace(test,"}", "");
问题2

表达我想缩小范围: {容器:Jake Running·56 GPM·Beans}

所需的Regex.replace结果:“正在运行”

这句话,

{Container:\s*([^\s}]+).*
抓住杰克,然后

可能会重新开始跑步

实例
对于这两种情况,您都有两个选项:使用lookarounds在完全匹配中获取所需内容,或者使用捕获组提取结果

使用Lookarounds捕获{Container:…}之间的所有内容


你可以测试它,检查解释,并根据模式生成C代码,即使它不支持上面的第二个选项。

我只是把它扔到你的脚下,没有任何解释:var result=Regex.Replaces1,@{Container:\s++?I:[a-z]+[a-z]+\s+[a-z]+\s.+},$1;。如果有人想写一个基于这个正则表达式替换的答案和解释,请随时邀请;-代替替换,您也可以只匹配并获取捕获组的值;让你的船漂浮的东西;-仅供参考,如果您仅使用静态文本进行替换,则不需要使用正则表达式,只需使用string.replace即可。[^\s]可替换为\s
{Container:\s*([^\s}]+).*
{Container:.*?\s*([^\s]+)\s*·.*
using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"{Container:.*?\s*([^\s]+)\s*·.*";
        string substitution = @"$1";
        string input = @"{Container: randomname Running · random# GPM · randomitem}
{Container: Jake Running · 56 GPM · Beans}
{Container: Jake-Some-other-name Running · 56 GPM · Beans}
{Container: Jake-Some-other-name     Running     · 56 GPM · Beans}";
        RegexOptions options = RegexOptions.Multiline;
        
        Regex regex = new Regex(pattern, options);
        string result = regex.Replace(input, substitution);
    }
}
(?<={Container:\s).*?(?=})

(?<={Container:\s\w+\s)\w+(?=\s.*?})
{Container:\s(\S+)}

{Container:\s\w+\s(\S+)\s.*?}