Разбить строку, содержащую элемент и значение в словарь в C# - PullRequest
2 голосов
/ 22 апреля 2020

Каков наилучший способ разбить имя / описание значения на dictionary <string, string>?

string test = postedByUser='Jason, Bourne' postedById='48775' Text='Some text in here' postedDate='2020-04-21'

, так что в идеале я хочу

dictionary key = postedByUser, value = Jason, Bourne
dictionary key = postedById, value = 48775

et c

код добавлен до сих пор

string test = @"postedByUser=Jason, Bourne' postedById='48775' Text='Some text in here' postedDate='2020-04-21'";

Dictionary<string, string> dict = new Dictionary<string, string>(); 

List<string> lst = test.Split('=').ToList(); 

foreach(string item in lst) 
{     
    // cant figure out how edit the orginal string to remove the item that has 
    //been split by the '=' 
}

Ответы [ 4 ]

1 голос
/ 22 апреля 2020

Попробуйте это (довольно некрасиво, но должно работать):

var dict = test.Split("' ").Select(t=>string.Concat(t,"'").Split("=")).ToDictionary(t=>t[0],t=>t[1]);
1 голос
/ 22 апреля 2020

Хорошо, следующий код решит вашу проблему, но я предлагаю вам добавить дополнительную обработку исключений, чтобы сделать код устойчивым.

string test = @"postedByUser='Jason, Bourne' postedById='48775' Text='Some text in here' postedDate='2020-04-21'";

Dictionary<string, string> dict = new Dictionary<string, string>();

List<string> keyvalues = test.Split("' ").ToList();
foreach(var keyvalue in keyvalues)
{
    var splitKeyValue = keyvalue.Split('=');
    dict.Add(splitKeyValue[0], splitKeyValue[1]);
}

РЕДАКТИРОВАТЬ:

Для. NET Framework 4.6,

List<string> keyvalues = test.Split(new string[] { "' " }, StringSplitOptions.None).ToList();
0 голосов
/ 22 апреля 2020

Для решения этой проблемы можно использовать регулярные выражения :

string text = @"postedByUser='Jason, Bourne' postedById='48775' Text='Some text in here' postedDate='2020-04-21'";
Dictionary<string, string> result = new Dictionary<string, string>();

foreach (Match m in Regex.Matches(text, @"(\w+)=\'(.+?)\'"))
{
    result.Add(m.Groups[1].Value, m.Groups[2].Value);
}

Вот полный образец .

0 голосов
/ 22 апреля 2020

Используйте String.Split(..), чтобы отделить строку для обработки.

Документация String.Split

Сначала разбейте строку на основе пробела ' ' как разделитель, например

var splitStrings = test.Split(' ', StringSplitOptions.None);

, затем пропустите каждую строку в строках и разделите, используя '='. Это даст вам список из 2 строк, где первая - ваш ключ, а вторая - ваше значение.

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