Я был в кругах с этим и нуждался в некоторой помощи. У меня есть метод, который оценивает код, поэтому, если я передаю этот Eval("DateTime.Now.Year - 1986")
, он вернет 29, он отлично работает, и это означает, что я могу иметь встроенный код в своих сообщениях, которые динамически оцениваются во время выполнения (это может представлять некоторые проблемы безопасности, но для некоторых других time), вот пример строки, с которой я пытаюсь работать: string inStr = "this year is [EVAL]DateTime.Now.Year[/EVAL] and it has been [EVAL]DateTime.Now.Year - 1986[/EVAL] years since 1986";
Мне нужно регулярное выражение, которое заменит все экземпляры [EVAL] и вернет полный текст с оцененными результатами. Кто угодно?Оценка встроенного кода C# из сообщения
ответ
Вы хотите Regex, вы можете иметь регулярное выражение ...
string inStr = "this year is [EVAL]DateTime.Now.Year[/EVAL] and it has been [EVAL]DateTime.Now.Year - 1986[/EVAL] years since 1986";
var rx = new Regex(@"(\[EVAL\])(.*?)(\[/EVAL])");
string outStr = rx.Replace(inStr, RegexReplacer);
с
public static string RegexReplacer(Match match)
{
return Eval(match.Groups[2].Value);
}
или в зависимости от типа возвращаемого Eval
:
public static string RegexReplacer(Match match)
{
object obj = Eval(match.Groups[2].Value);
return obj != null ? obj.ToString() : string.Empty;
}
захвате группа № 2 - (.*?)
. Обратите внимание на использование ленивого квантификатора .*?
, поскольку в противном случае захват будет [EVAL]DateTime.Now.Year[/EVAL] and it has been [EVAL]DateTime.Now.Year - 1986[/EVAL]
Гораздо короче, чем тот, с которым я столкнулся ... –
Это сработало, все еще нужно тестировать с более сложными [EVAL] s, но как я могу получить возврат в одной строке 'return rx.Replace (inStr, RegexReplacer);' без отдельного RegexReplacer? –
@NelsonPires Минимальное значение похоже на: 'string outStr = rx.Replace (inStr, match => Eval (match.Groups [2] .Value))' – xanatos
- 1. Вторая оценка встроенного R-кода в knitr
- 2. C# проблема передачи встроенного кода
- 3. Удаление встроенного кода из html
- 4. Оценка владельца кода lua
- 5. Преобразование Visual C/C++ встроенного ассемблера кода GCC эквивалентного кода
- 6. Оптимизация кода C, оценка полинома Хорнера
- 7. Оценка кода Phalanger в winforms C#
- 8. Формат встроенного сообщения TNEF
- 9. Замена встроенного кода сборки
- 10. Javascript: оценка и возврат встроенного текста
- 11. Ошибки встроенного редактирования кода
- 12. Добавить Mulitple встроенного стиля из кода за
- 13. Запрос встроенного кода XML из SSRS
- 14. веревочка из встроенного кода Java в JSP
- 15. Отображение текста HTML из встроенного блока кода
- 16. Запуск встроенного VBScript кода из Java
- 17. Оценка логики исходного кода
- 18. Оценка кода PHP
- 19. Значок размера встроенного кода
- 20. Отладка встроенного Lua 5.2.2 кода
- 21. Scala Worksheet Оценка старого кода
- 22. использовать значения управляющего встроенного кода
- 23. Советы по оптимизации встроенного кода
- 24. Программирование в C Оценка символов из строки
- 25. Оценка блоков кода в Rebol3
- 26. оценка для кода приложения php
- 27. Оценка динамического кода в scala
- 28. Оценка Template Toolkit примеры кода
- 29. Оценка кода RMarkdown до команды
- 30. Настройка прошивки Protobuf или встроенного сообщения и возврат объекта сообщения
Вы знаете, что можете просто 'IndexOf (" [EVAL] ")' не бороться с регулярными выражениями? – xanatos
@ Zaki: Я думаю, что они просят не отменять только те же «[EVAL]», но также и _replace/evaluation_ выражения внутри этих флагов. EDIT: то есть, у них есть оценочный код, поэтому им нужно только вывести выражения. –
Вы можете попробовать 'string.Split()' вдоль '" [EVAL] "и' "[/ EVAL]" 'границы, сохраняя в пользовательскую структуру данных, которая по существу обертывает два списка. Одна из буквенных строк и одна из строк, способных оценивать. Затем оцените их и заново постройте результирующую строку из списков. – David