Строка C# заменяет словарем

Если Вы имеете Прототип установленный, можно ограничить код, чтобы генерировать и отправить скрытую форму как это:

 var form = new Element('form',
                        {method: 'post', action: 'http://example.com/'});
 form.insert(new Element('input',
                         {name: 'q', value: 'a', type: 'hidden'}));
 $(document.body).insert(form);
 form.submit();

31
задан RaYell 5 August 2009 в 07:58
поделиться

2 ответа

Если данные токенизированы (например, «Уважаемый $ name $, по состоянию на $ date $ ваш баланс составляет $ amount $»), то Regex может быть полезным:

static readonly Regex re = new Regex(@"\$(\w+)\$", RegexOptions.Compiled);
static void Main() {
    string input = @"Dear $name$, as of $date$ your balance is $amount$";

    var args = new Dictionary<string, string>(
        StringComparer.OrdinalIgnoreCase) {
            {"name", "Mr Smith"},
            {"date", "05 Aug 2009"},
            {"amount", "GBP200"}
        };
    string output = re.Replace(input, match => args[match.Groups[1].Value]);
}

Тем не менее, без чего-то подобного, я ожидаю, что ваш цикл Replace , вероятно, будет примерно таким, как вы, без чрезмерной длины. Если он не токенизирован, возможно, профилируйте его; действительно ли проблема Заменить ?

45
ответ дан 27 November 2019 в 21:40
поделиться

Мне кажется разумным, за исключением одного: он чувствителен к порядку. Например, возьмите входную строку «$ x $ y» и словарь замены:

"$x" => "$y"
"$y" => "foo"

Результатом замены будет либо «foo foo», либо «$ y foo» в зависимости от того, какая замена сначала выполняется.

Вы можете управлять порядком, используя вместо этого List > . Альтернатива - пройтись по строке, убедившись, что вы не потребляете замены в дальнейших операциях замены. Хотя это, вероятно, будет намного сложнее.

9
ответ дан 27 November 2019 в 21:40
поделиться
Другие вопросы по тегам:

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