将模式的多个引用替换为正则表达式

本文关键字:替换 正则表达式 引用 模式 | 更新日期: 2023-09-27 18:31:13

我有一个字符串

,形式如下
$KL'U#, $AS'gehaeuse#, $KL'tol_plus#, $KL'tol_minus#

基本上这个字符串由以下部分组成

  • $ = 分隔符开始
  • (部分文字)
  • # = 分隔符结束
  • (全部n次)

我现在想用一些有意义的案文来取代这些章节中的每一个。因此,我需要提取这些部分,根据每个部分中的文本执行一些操作,然后用结果替换该部分。因此,生成的字符串应如下所示:

12V, 0603, +20%, -20%

逗号和部分中未包含的其他所有内容保持原样,这些部分将替换为有意义的值。

对于这个问题:你能帮我提供一个正则表达式模式,找出这些部分的位置,以便我可以替换它们吗?

将模式的多个引用替换为正则表达式

您需要使用 Regex.Replace 方法并使用 MatchEvaluator 委托来决定替换值应该是什么。

您需要的模式可以是$,然后是除#以外的任何模式,然后是#。我们将中间位放在括号中,以便将其作为单独的组存储在结果中。

'$([^#]+)#

完整的事情可以是这样的(由你做正确的适当的替换逻辑):

string value = @"$KL'U#, $AS'gehaeuse#, $KL'tol_plus#, $KL'tol_minus#";
string result = Regex.Replace(value, @"'$([^#]+)#", m =>
{
    // This method takes the matching value and needs to return the correct replacement
    // m.Value is e.g. "$KL'U#", m.Groups[1].Value is the bit in ()s between $ and #
    switch (m.Groups[1].Value)
    {
        case @"KL'U":
            return "12V";
        case @"AS'gehaeuse":
            return "0603";
        case @"KL'tol_plus":
            return "+20%";
        case @"KL'tol_minus":
            return "-20%";
        default:
            return m.Groups[1].Value;
    }
});

就匹配模式而言,您需要:

'$[^#]+#

你剩下的问题不是很清楚。 如果需要将原始字符串替换为一些有意义的值,只需遍历匹配项:

var str = @"$KL'U#, $AS'gehaeuse#, $KL'tol_plus#, $KL'tol_minus#";
foreach (Match match in Regex.Matches(str, @"'$[^#]+#"))
{
    str = str.Replace(match.ToString(), "something meaningful");
}

除此之外,您还必须提供更多上下文

您确定不想只执行普通的字符串操作吗?

var str = @"$KL'U#, $AS'gehaeuse#, $KL'tol_plus#, $KL'tol_minus#";
string ReturnManipulatedString(string str)
{
    var list = str.split("$");
    string newValues = string.Empty;
    foreach (string st in str)
    {
         var temp = st.split("#");
         newValues += ManipulateStuff(temp[0]);
         if (0 < temp.Count();
             newValues += temp[1];
    }
}