C# 替换正则表达式匹配

C# 替换正则表达式匹配,c#,replace,C#,Replace,我有这个字符串: string coordinates = @"=ZS123, ZS1234 + 36 + Z(56)S45 + 0"; 此字符串必须转换为另一个字符串,具体取决于值。正则表达式会找到进行计算所需的值。正则表达式匹配以下值:ZS123、ZS1234、Z(56)S45 我是编程新手,非常感谢你的帮助。我希望到目前为止这是可以理解的而不是使用Regex.Matches(),您应该使用带有参数的方法重载,以便可以在MatchEvaluator的方法中进行“计算”

我有这个字符串:

string coordinates = @"=ZS123, ZS1234 + 36 + Z(56)S45 + 0";
此字符串必须转换为另一个字符串,具体取决于值。正则表达式会找到进行计算所需的值。正则表达式匹配以下值:ZS123、ZS1234、Z(56)S45


我是编程新手,非常感谢你的帮助。我希望到目前为止这是可以理解的

而不是使用
Regex.Matches()
,您应该使用带有参数的方法重载,以便可以在MatchEvaluator的方法中进行“计算”

您的代码应该如下所示:

Regex regEx = new Regex(@"(Z.*?S(?:\([^)]+\))?(?:\d+)?)");
string coordinates = @"=ZS123, ZS1234 + 36 + Z(56)S45 + 0";

string output = regEx.Replace(coordinates, delegate (Match m)
{
    string cellIndex = m.Value;
    if (m.Value.StartsWith("ZS("))
    {
        //calculations
        cellIndex = "Something";
    }
    else if (m.Value.StartsWith("Z(") && m.Value.Contains("S("))
    {
        //calculations
        cellIndex = "Something else";
    }
    // etc.

    return cellIndex;
});
请注意,我没有对您的正则表达式模式进行任何更改,因为您没有提供足够的关于什么应该匹配什么不应该匹配的信息。不过,让我指出一点

Z.*S
部分将匹配“Z”和“S”之间的任意数量的字符(任意字符)。因此,它将匹配以下内容:ZA1@S". 它也是负责在第三个预期匹配中匹配“Z(56)s”的部分,而
(?:\([^)]+\)?
部分在这里是不相关的。如果您的初衷是只允许在“Z”和“S”之间使用括号,那么您可能应该使用以下内容:

Z(?:\([^)]+\))?S(?:\d+)?

另一个注意事项是,您可能需要查看您的
if
条件,因为根据您预期的匹配情况,这些条件实际上没有意义。也就是说,没有一个匹配项以“ZS”开头,或者两个匹配项都以“Z”开头并包含“S”(。

这正是我所需要的,工作非常完美!!regex对我来说很好,但无论如何,感谢您抽出时间!
Z(?:\([^)]+\))?S(?:\d+)?