У меня есть около 10 фрагментов данных из записи, и я хочу иметь возможность определить макет строки, в которую возвращаются эти данные, с возможностью пропустить некоторые фрагменты. Я думал о том, чтобы использовать enum для предоставления целочисленных значений моим токенам / полям, а затем иметь формат вроде {0}{1}{2}{3}
или что-то более сложное, например {4} - {3}{1} [{8}]
. Значение токенов относится к полям в моей базе данных. Например, у меня есть это перечисление для моих токенов, касающихся совершенных платежей.
AccountMask = 0,
AccountLast4 = 1,
AccountFirstDigit = 2,
AccountFirstLetter = 3,
ItemNumber = 4,
Amount = 5
Маска учетной записи - это строка типа VXXXXX1234, где V - для визы, а 1234 - последние 4 цифры карты. Иногда клиенты хотят V, иногда они хотят первую цифру (тип карты легко перевести в первую цифру).
Моя цель - создать что-то повторно используемое для генерации строки с использованием токенов в строке формата, которая затем будет использовать данные, связанные с цифрой внутри токена, для замены данных на месте.
Итак, для примера с использованием маски выше и моего перечисления, если я хочу определить формат 9{2}{1}{4:[0:0000000000]}
если номер позиции 678934
, который затем будет преобразован в 9412340000678934, где внутренняя часть токена 4 станет определением для String.Format
этого значения. Кроме того, данные, размещенные вокруг токенов, игнорируются и сохраняются.
Моя проблема касается манипуляции со струной и лучшей практики. Мне сказали, что регулярные выражения могут быть дорогостоящими, если вы собираетесь создавать их на лету. Как мажор CS, я чувствую, что «правильное» (хотя и сложное) решение - создать лексер / парсер для моих токенов. У меня нет опыта написания лексера / синтаксического анализа в C #, поэтому я не уверен в лучших практиках вокруг него. Я ищу руководство по системе, которая эффективна и легко настраивается.