Разбор значений из строки с шаблоном - PullRequest
0 голосов
/ 28 июня 2018

Существует ли какой-либо метод или библиотека с функцией, которая позволяет выполнять такой анализ из строки: Вход: строка ввода, в которой я хочу искать, шаблон для поиска (опишу позже). Вывод: массив строк

Шаблон должен быть в формате как:

"Items: {0} in Boxes: {1}"

Таким образом, вы должны указать места, где должны быть выходные значения.

Примеры ввода и вывода с использованием этого шаблона:

Ввод: "Items Item 1, Item 2 in Boxes Box 1, Box 2"

Выход: ["Item 1, Item 2", "Box 1, Box 2"]

Я знаю, что это не сложная функция для написания, но я ищу существующее решение в стандартной библиотеке .NET или нестандартное и быстрое решение.

1 Ответ

0 голосов
/ 28 июня 2018

Есть два решения, о которых я могу подумать: использование Regex или использование String функций манипуляции.

Первый подход с регулярным выражением:

string text = "Items Item 1, Item 2 in Boxes Box 1, Box 2";

var match = Regex.Match(text, "^Items(?: ([^,]*),?)* in Boxes(?: ([^,]*),?)*$");

System.Console.WriteLine("Items:");
foreach (Capture cap in match.Groups[1].Captures)
    System.Console.WriteLine(cap.Value); // -->Item1 and Item2

System.Console.WriteLine("Boxes:");
foreach (Capture cap in match.Groups[2].Captures)
    System.Console.WriteLine(cap.Value); // --> Box 1 and Box 2

Решение с классическими строковыми операциями:

string text = "Items Item 1, Item 2 in Boxes Box 1, Box 2";

var allItems = text.Remove(text.IndexOf("in Boxes")).Remove(0, "Items ".Length);
var itemArray = allItems.Split(',');

var allBoyes = text.Remove(0, text.IndexOf("in Boxes")).Remove(0, "in Boxes ".Length);
var boxArray= allItems.Split(',');

Позаботьтесь о местах, оставленных здесь, вам все еще нужно .Trim() предметы.

Что вы используете и что лучше всего подходит для вашей проблемы, зависит от обстоятельств. Я бы предпочел строковое решение, так как оно более читабельно и менее подвержено ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...