Повторите эту часть для каждого из ваших заполнителей:
Regex PlaceholderExpander = new Regex(@"\{Image, ([^,]+), ([^,]+)(?:, ([^}]+))?\}");
string Expanded = PlaceholderExpander.Replace(YourHtmlStringWithPlaceholders, "<img src='$1' alt='$3' class='quipImg$2'></img>");
[^,]
означает «любой символ, кроме ,
», поэтому останавливается перед следующим ,
, несмотря на жадный +
квантификатор. Это трюк для скорости обработки . Более очевидной альтернативой будет использование lazy (a.k.a. ungreedy , recuctant ) .
(?:…)
является не захватывающей группой - на нее нельзя ссылаться с чем-то вроде $3
. Я использовал его, чтобы охватить часть, принадлежащую необязательному последнему параметру - он стал необязательным с последним ?
.
Теперь я сделал последний параметр необязательным, поэтому он поддерживает оба
{Image, picture.jpg, Centre, Picture Info}
и
{Image, ServiceTile.jpg, Left}
последний в результате
<img src='ServiceTile.jpg' alt='' class='quipImgLeft'></img>
Я проверял это в http://rextester.com/rundotnet с этим кодом:
string YourHtmlStringWithPlaceholders = "Aenean {Image, picture.jpg, Centre, Picture Info} non felis at est gravida tincidunt. {Link, news.bbc.co.uk, popup, 500, 800} Donec non diam a mauris vestibulum condimentum eu vitae mi! Aenean sed elit libero, id mollis felis! {Image, ServiceTile.jpg, Left}";
Regex PlaceholderExpander = new Regex(@"\{Image, ([^,]+), ([^,]+)(?:, ([^}]+))?\}");
string Expanded = PlaceholderExpander.Replace(YourHtmlStringWithPlaceholders,"<img src='$1' alt='$3' class='quipImg$2'></img>");
Console.WriteLine(Expanded);