Получить выражение регулярного выражения для пары ключ-значение, разделенной запятой - PullRequest
0 голосов
/ 29 июня 2018

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

input: "tag.Name:test,age:30,name:TestName123"

Пока это моя попытка

string pattern = @".*:.*" 

(Полагаю, что. * Обозначает что-либо несколько раз, затем: и снова что-нибудь несколько раз, если я добавлю запятую в конце, *

string pattern = @".*:.*,*"

Полагаю, это то же самое, но у меня это не сработало, конечный результат можно получить с помощью Linq, но я не хотел бы разбирать входные данные

Образец моего вывода

ВХОД

string input = "tags.tagName:Tag1,tags.isRequired:false"
var finaRes = input.Split(',').Select(x => x.Split(':')).Select(x => new { Key = x.First(), Value= x.Last()});

ВЫВОД:

Key              Value
---------------|-------
tags.tagName   |  Tag1 
tags.isRequired|  false 

Ответы [ 2 ]

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

Вы можете использовать это регулярное выражение (демо-версия здесь )

(?<key>[^:]+):(?<value>[^,]+),?

Пояснение:

(?<key>[^:]+) // this will match a 'key' - everything until colon char
(?<value>[^,]+) // this  will match a 'value' - everything until comma char

C # пример:

var regex = new Regex("(?<key>[^:]+):(?<value>[^,]+),?");
var input = "tag.Name:test,age:30,name:TestName123";

var matches = regex.Matches(input);

foreach (Match match in matches)
{
    Console.Write(match.Groups["key"]);
    Console.Write(" ");
    Console.WriteLine(match.Groups["value"]);
}

Вывод будет:

tag.Name test
age 30
name TestName123

Демо

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

Что-то вроде /([^,]+):([^,]+)/g должно быть в состоянии достичь этого. Обратите внимание, что это позволит использовать пробелы в ключах и значениях.

Это будет соответствовать каждой паре ключ-значение, и каждое совпадение будет содержать 2 группы, группа 1 - это ключ, а 2 - это значение.

Вот полезный инструмент, который вы можете использовать, чтобы увидеть, как он работает и протестировать: https://regex101.com/r/m5KVfu/2

...