Допустим, у меня есть этот бесплатный текст
unitType:unit_failure;unitId:b7eb;unitTitle:L1-O VEN_ACC_SETTINGS>(30s)>EXCL(A);applicable:true;comment:Decline sender:SELLER;Decline reason:VEN_ACC_SETTINGS;triggered by user:495259708;Display reason: CON_FAILURE;modified by: log_res_mon
Я хочу извлечь значения в объект с теми же именами свойств.
public class Values
{
public string UnitType { get; set; }
public string UnitId { get; set; }
public string UnitTitle { get; set; }
public string Applicable { get; set; }
public string DeclineSender { get; set; }
public string DeclineReason { get; set; }
public string TriggeredByUser { get; set; }
public string DisplayReason { get; set; }
public string ModifiedBy { get; set; }
}
до сих пор я пробовал этот код:
string comment = "unitType:unit_failure;unitId:b7eb;unitTitle:L1-O VEN_ACC_SETTINGS>(30s)>EXCL(A);applicable:true;comment:Decline sender:SELLER;Decline reason:VEN_ACC_SETTINGS;triggered by user:495259708;Display reason: CON_FAILURE;modified by: log_res_mon";
string regex = @"(.*?:\s*)(\w*);?";
var matches = Regex.Matches(comment, regex);
Что почти сработало. но вы можете видеть, что unitTitle
было вырезано после L1-
.
Другое дело, comment:
— это исключение, которое можно удалить либо выражением, либо я могу просто удалить его с помощью .Replace
.
-
Как исправить выражение, чтобы оно включало полное значение
unitTitle
и удалялоcomment:
(можете сказать, проще использовать.Replace
)? -
Как лучше всего извлечь значения из
matches
и заполнить ими объект?
РЕДАКТИРОВАТЬ: Я пробовал это, но это действительно уродливо, есть ли лучший способ? (Не обращайте внимания на то, что я использую анонимный объект, это только для тестирования).
var obj = new
{
unitType = matches.Single(x => x.Groups[1].Value == "unitType").Groups[2].Value
};
РЕДАКТИРОВАТЬ: много хороших ответов, но я могу выбрать только один, поэтому я выбираю вариант с простым запросом Regex.
Пожалуйста, не размещайте изображения текста.
@JoelCoehoorn Я думаю, очевидно, что изображение взято из кода VS, которое показывает значения во время выполнения, и нет возможности скопировать и вставить их как есть. Кроме того, изображение предназначалось только для объяснения того, как возникает проблема (значение разбито на два поля).