2017-03-01 40 views
0

的令牌我遇到了一個問題,即將模板應用於對象,並使用查找和替換功能以模板形式一串html。問題是,圖像的高度和寬度包含在令牌中,因此我無法找到和替換,因爲它可能會有所不同。如何查找並替換ac#字符串中的值爲

令牌值是[ARTICLEIMAGE:150:200]

foreach(var article in articles) { 
    var articleTemplateValue = _TemplateArticleMarkup; 
    articleTemplateValue = articleTemplateValue.Replace("[ARTICLEIMAGE:xx:yy]", "<img src=" + article.ArticleImageFolder + "/" + article.ArticleImage + " title=" + article.ArticleTitle + " width=" 
     xx" height=" 
     yy" />"); 
} 

這顯然不會爲每個實例作爲圖像標記的尺寸將變化工作。有沒有辦法找到令牌作爲StartsWith,然後拆分維數組:。請讓我知道,如果這是有道理的,因爲它有點混亂。謝謝!

回答

1

正則表達式將爲您解決這個問題。

using System.Text.RegularExpressions; 

然後更改您的代碼,如下所示。

foreach (var article in articles) 
{ 
    string articleTemplateValue = _TemplateArticleMarkup; 

    MatchCollection mc = Regex.Matches(articleTemplateValue, @"\[ARTICLEIMAGE\:(\d+)\:(\d+)\]"); 

    if (mc.Count > 0) 
    { 
     string toReplace = mc[0].Value; 
     string xx = mc[0].Groups[1].Value; 
     string yy = mc[0].Groups[2].Value; 

     articleTemplateValue = articleTemplateValue.Replace(toReplace, "<img src=\"" + article.ArticleImageFolder + "/" + article.ArticleImage + "\" title=\"" + article.ArticleTitle + "\" width=\"" + xx + "\" height=\"" + yy + "\"/>"); 
    } 
} 
+0

是完美的,而其他方法的工作,這適合我的應用程序更好一點。謝謝大家的幫助! – blair260

1

您可以使用Split()命令查找寬度和高度。一個非常粗略的方法如下:

rextester remo

String articleTemplateValue = "[test:40:200]"; 

Console.WriteLine(articleTemplateValue); 

var arr = articleTemplateValue.Split(':'); 
if (arr.Length == 3) { 
    var xx = arr[1]; 
    var yy = arr[2].Substring(0, arr[2].Length - 1); 

    articleTemplateValue = articleTemplateValue.Replace(articleTemplateValue, "<img src=" 
     + "folder" + "/" + "image" + " title=" + "ArticleTitle" + " width="+ xx + " height= " + yy+ "/>"); 

    Console.WriteLine(articleTemplateValue); 
} 
+0

感謝@ giorgos-altanis這很簡單圖像的偉大工程,但如果我有我的模板內附加的標記和標記等 -

[test:40:200]
[POSTEDDATE:mm/dd/yyyy]
當我在rextester發揮它不能正確渲染。 – blair260

+0

然後你會有一個不同的問題:-)無論如何,正則表達式的方法是更優雅和「經濟」。 –

0

使用正則表達式會做的伎倆repl.it demo

  1. "\[ARTICLEIMAGE:\d+?:\d+?\]"
  2. \[逃脫[人物。括號內是特殊字符正則表達式中
  3. \d任何數字
  4. \d+?:+是0或多個數字。直到我們找到冒號:。這個?指非貪婪和真的不需要......
  5. \]逃脫右括號

var matches = Regex.Match(articleTemplateValue, @"\d+"); 
    var xx = matches; 
    var yy = matches.NextMatch(); 
    var template = "<img src=" + article.ArticleImageFolder + "/" + article.ArticleImage + " title=" + article.ArticleTitle + " width=" 
     + xx + " height=" 
     + yy + " />"; 
    articleTemplateValue = articleTemplateValue = Regex.Replace(articleTemplateValue, @"\[ARTICLEIMAGE:\d+?:\d+?\]", template); 

使用

+0

謝謝@Joe - 這真是太棒了。我只是爲了解它的工作原理而撓了撓頭。如果我想添加另一個表示包含不同格式日期的令牌說明怎麼辦?例如:「

[Date:mm/dd/yyyy]
[ARTICLEIMAGE:72:50]
」我可以使用相同的方法來替換和格式化該日期,還是隻是在d +上點擊? – blair260

+0

另外 - 格式化日期可以使用類似的語法嗎? – blair260

+0

是的,如果原始格式已知,通常使用正則表達式對日期進行分析。用於替換的'\ [日期:\ d \ d \ d \ d \ d \ d \ d \ d \]'和匹配月份,日期和年份的「\ d {2.4}」' – Joe

相關問題