C# Назвал параметры к строке, которые заменяют к значениям параметров

Объяснения остаются теми же, что и в предыдущем вопросе, но мы просто добавляем код vbs, чтобы получить правильную дату в требуемом формате.

@echo off
echo >"%temp%\%~n0.vbs" s=DateAdd("d",0,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
if exist "C:\TEMP\zip\source\JEAR_%result%" (
    set "mypath=C:\TEMP\zip\source\JEAR_%result%"
 )  else (
    exit
 )
if "%mypath:~-1%"=="\" set "mypath=%mypath:~0,-1%"
for %%i in (%mypath%) do set "last=%%~nxi"
CScript zip.vbs %mypath% C:\TEMP\zip\target\%last%.zip

Причина использования

7
задан Jan Goyvaerts 19 December 2008 в 13:48
поделиться

6 ответов

Вы подтвердили, что регулярные выражения являются слишком дорогими?

Стоимость регулярных выражений значительно преувеличена. Для такого простого шаблона производительность будет довольно хорошей, вероятно, незначительно менее хорошей, чем прямой поиск-и-замена на самом деле. Кроме того, имейте Вас, экспериментировал с Compiled отметить при построении регулярного выражения?

Тем не менее не можете Вы просто использовать самый простой путь, т.е. Replace?

string varname = "name";
string pattern = "{" + varname + "}";
Console.WriteLine("Hi {name}".Replace(pattern, "Mike"));
20
ответ дан 6 December 2019 в 05:06
поделиться

Теперь, если у Вас есть Вы замены в словаре, как это:

    var  replacements = new Dictionary<string, string>();
    replacements["name"] = "Mike";
    replacements["age"]= "20";

затем Regex становится довольно простым:

Regex regex = new Regex(@"\{(?<key>\w+)\}");
    string formattext = "{name} is {age} years old";
    string newStr = regex.Replace(formattext, 
            match=>replacements[match.Groups[1].Captures[0].Value]);
3
ответ дан 6 December 2019 в 05:06
поделиться

Regex является, конечно, жизнеспособным вариантом, особенно с a MatchEvaluator:

    Regex re = new Regex(@"\{(\w*?)\}", RegexOptions.Compiled); // store this...

    string input = "Hi {name}, do you like {food}?";

    Dictionary<string, string> vals = new Dictionary<string, string>();
    vals.Add("name", "Fred");
    vals.Add("food", "milk");

    string q = re.Replace(input, delegate(Match match)
    {
        string key = match.Groups[1].Value;
        return vals[key];
    });
13
ответ дан 6 December 2019 в 05:06
поделиться

Скомпилированный regex мог бы добиться цели, особенно если существует много маркеров, которые будут заменены. Если бы существует только горстка они, и производительность является ключевой, я просто нашел бы маркер индексом и заменой с помощью строковых функций. Хотите верьте, хотите нет, это будет быстрее, чем regex.

0
ответ дан 6 December 2019 в 05:06
поделиться

Попытайтесь использовать StringTemplate. Это намного более мощно, чем это, но это делает безупречное задание.

0
ответ дан 6 December 2019 в 05:06
поделиться

Как насчет

stringVar = "Hello, {0}. How are you doing?";
arg1 = "John";    // or args[0]
String.Format(stringVar, arg1)

Вы даже можете несколько аргументов, просто увеличьте {x} и добавьте еще один параметр в метод Format (). Не уверен, что разные, но и «строка», и «Строка» имеют этот метод.

1
ответ дан 6 December 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: