C # регулярное выражение заменить и избежать переменных - PullRequest
0 голосов
/ 04 января 2012

поэтому я пишу что-то вроде игрушечного компилятора на C #, и я пытаюсь сделать это с помощью команды print, для каждой подстроки, начинающейся с символа '$' (например, - $ foo), замените еес соответствующей переменной.(в основном, символ '$' указывает на имя переменной).

На данный момент я использовал regex, чтобы найти все подстроки, содержащие символ '$', однако у меня возникли проблемы с заменой.метод.Как хранятся переменные, это через класс хранения переменных оценщика FLEE.(FLEE - быстрый анализатор облегченных выражений), они действуют как карта, где ключ - это имя переменной, а значение - значение переменной.

Мой код выглядит следующим образом:

        public void print(string exp)
    {
        this.expression = exp;
        MatchEvaluator eval = new MatchEvaluator(this.matchEval);
        MatchCollection coll = Regex.Matches(exp, @"(?<!\w)\$\w+");
        this.split = new string[coll.Count];
        int index = 0;
        foreach (Match match in coll)
        {
            this.split[index] = match.ToString();
            index++;
        }
        this.i = 0;
        Regex.Replace(exp, @"(?<!\w)\$\w+", eval);
        Console.WriteLine(exp);
        Console.ReadKey();
    }

    private string matchEval(Match m)
    {
        this.split[this.i] = this.split[this.i].TrimStart('$');
        if(i != split.Length-1)
            this.i++;
        return this.split[this.i];
    }

он еще не возвращает переменные, так как он по-прежнему возвращает совпадения с регулярным выражением, включая символ '$'.

любая помощь будет принята с благодарностью, спасибо.

1 Ответ

1 голос
/ 22 января 2012

Как отмечает Марсель Вальдес Орозко, выражение не является проблемой. Проблема заключается в том, что вы ожидаете обновления String с помощью вызова Regex.Replace, но вместо этого Regex.Replace возвращает новый экземпляр String.

Обновите свой код, чтобы учесть это:

exp = Regex.Replace(exp, @"(?<!\w)\$\w+", eval);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...