簡體   English   中英

根據數組元素替換字符串

[英]Replace string based on array element

我有一個帶有一些值的數組,也有一些參數字符串,我都放在下面。 我想替換基於數組元素的參數字符串。 請幫我做這件事。

string[] arrayval = {"Type:1","Action:doit","Message:hai"};

string Param = "Type:[Type]#Action:[Action]#Message:[Message]#OutMsg:[OutMsg]#@RetVal:[RetVal]";

My Expected Output 


string Param = "Type:1#Action:doit#Message:hai#OutMsg:[OutMsg]#@RetVal:[RetVal]";

不太整齊。 但是根據您所提供的信息。 以下應該工作。

string[] arrayval = { "Type:1", "Action:doit", "Message:hai" };
string Param = string.Format("Type:{0}#Action:{1}#Message:{2}", arrayval[0].Split(':')[1], arrayval[1].Split(':')[1], arrayval[2].Split(':')[1]);

輸出:類型:1#操作:doit#消息:hai

未經測試,應添加一些檢查,但請參見@Ulugbek Umirov版本:)

var pattern = @"\[(.*?)\]";
var matches = Regex.Matches(Param, pattern);

foreach (Match m in matches) {
    var inb = "[" + m.Groups[1] + "]";
    var results = arrayval.Select (s  => s.Split(':'))
                          .FindAll(ss => ss[0] == m.Groups[1])
                          .Select (ss => ss[1]);
    Param = Param.Replace(inb, results[0]);
}

順便說一下... @Ulugbek Umirov的短版本,應該可以正常工作:)

Param = Regex.Replace(Param, @"\[(.+?)\]", m =>
    arrayval.Select(s => s.Split(new[] { ':' }, 2))
            .Where (p => p.Length == 2)
            .Where (p => p[0] == m.Groups[1].Value)
            .Select(p => p[1])
            .FirstOrDefault() ?? m.Value);

如果不存在,則更新以0代替:

Param = Regex.Replace(Param, @"\[(.+?)\]", m =>
    arrayval.Select(s => s.Split(new[] { ':' }, 2))
            .Where (p => p.Length == 2)
            .Where (p => p[0] == m.Groups[1].Value)
            .Select(p => p[1])
            .FirstOrDefault() ?? "0");

@Heather的略微修改版本

Param = Regex.Replace(Param, @"\[(.+?)\]", m =>
{
    string paramName = m.Groups[1].Value;
    string paramValue = arrayval.Select(s => s.Split(new[] { ':' }, 2))
                                .Where(p => p.Length == 2)
                                .Where(p => p[0] == paramName)
                                .Select(p => p[1])
                                .FirstOrDefault();
    return paramValue ?? m.Value;
});

嘗試下面的代碼..我已經在VS 2012中對其進行了測試

string[] arrayval = { "Type:1", "Action:doit", "Message:hai" };

string Param = "Type: " + arrayval[0].Split(Convert.ToChar(":"))[1] + "#Action: " + arrayval[1].Split(Convert.ToChar(":"))[1] + "#Message: " + arrayval[2].Split(Convert.ToChar(":"))[1];

輸出:-

Type: 1#Action: doit#Message: hai

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM