#c# #parsing #syntax #wpf-controls
#c# #разбор #синтаксис #wpf-элементы управления
Вопрос:
Я пытаюсь разобрать синтаксическую строку, что-то вроде:
Папка для копирования [-Источник] [-Цель] -Перезапись -Рекурсивный -Ошибка продолжения
и динамически добавляйте компоненты/элементы управления WPF в панель стека, чтобы запрашивать у пользователя ввод, например
lt;StackPanelgt; lt;TextBlock Text="-Source" /gt; lt;TextBox Uid="-Source" /gt; lt;TextBlock Text="-Target"/gt; lt;TextBox Uid="-Target"/gt; lt;CheckBox Uid="-Overwrite" Content="Overwrite"/gt; lt;CheckBox Uid="-Recursive" Context="Recursive"/gt; lt;TextBlock Text="-ContinueOnError"/gt; lt;ComboBox Uid="-ContinueOnError"gt; lt;ComboBoxItemgt;Truelt;/ComboBoxItemgt; lt;ComboBoxItemgt;Falselt;/ComboBoxItemgt; lt;/ComboBoxgt; lt;/StackPanelgt;
Я пытаюсь использовать следующую функцию, чтобы получить различные фрагменты синтаксической строки:
public static class StringExtensions { public static string[] ParseArgs(this string source) { return Regex.Matches(source.Trim(), @"[""]. ?[""]|[']. ?[']|[lt;]. ?[gt;]|[[]. ?[]]|[{]. ?[}]|[^ ] ") .Castlt;Matchgt;() .Select(x =gt; x.Value) .Where(x =gt; x.Length gt; 0) .ToArray(); } }
Обратите внимание, что, поскольку у-ContinueOnError есть после, он получает поле для ввода, где-Recursive-это флажок… ContinueOnError может быть null, true или false (укажите, если не null), где -Рекурсивный может быть только true или false (включить переключатель или исключить переключатель). Существует еще одна возможность комбинирования, которая представляет собой набор значений, следующих за переключателем, таких как:
Имя службы-Действие {Установка, Удаление, Запуск, Остановка}
Где у меня возникают проблемы, так это когда за переключателем не следует значение (-Перезапись или-Рекурсивный в первом примере).
ПРИМЕЧАНИЕ: XAML был набран и непроверен, не скопирован и не вставлен, пожалуйста, извините за опечатки и т.д.
Комментарии:
1. У вас проблема с регулярным выражением, которое вы используете? То есть, не могли бы вы немного уточнить, в чем на самом деле заключается проблема?
2. Регулярное выражение, похоже, правильно анализирует аргументы… Я устал пытаться разобраться в этом и создал XML-файл для каждого элемента (их было 68) и использовал его вместо этого, к счастью, моему менеджеру больше понравилось решение XML, поскольку оно обеспечивало большую гибкость в будущем.
3. Хорошо, что вы нашли решение. Я заметил, что регулярное выражение разделило это
-Arg {opt1 opt2}
на две части, что может затруднить правильный анализ. Вы могли бы попробоватьstring.Split('-')
и начать с этого, но, безусловно, конфигурация XML звучит намного надежнее и надежнее для этой относительно сложной и гибкой настройки.