Skip to content

Key-Value Parsing

LineKeyValueParser parses text where each line is a key=value pair (or any other single-character separator, or a regex). Typical uses: config files, .env-style formats, INI-ish outputs from CLI tools.

Usage

csharp
using Servus.Parsing.Text;

var parser = new LineKeyValueParser('=');

string envFile = """
    APP_NAME=Servus
    APP_ENV=production
    LOG_LEVEL=info
    """;

foreach (var kv in parser.Parse(envFile))
{
    Console.WriteLine($"{kv.Key} -> {kv.Value}");
}

Custom separator

Any single char works as a separator:

csharp
var colon = new LineKeyValueParser(':');
colon.Parse("name: Andreas\nage: 42");

Regex-based split

For more complex cases (e.g. "split on = or :, trim surrounding whitespace"), pass a regex:

csharp
var flexible = new LineKeyValueParser(@"\s*[=:]\s*");

foreach (var kv in flexible.Parse("name : Andreas\nage=42"))
{
    // ("name", "Andreas"), ("age", "42")
}

Single-line parsing

If you already have a single line, skip the enumeration:

csharp
var kv = parser.ParseLine("APP_NAME=Servus");
// kv.Key = "APP_NAME", kv.Value = "Servus"

API

csharp
public class LineKeyValueParser
{
    public LineKeyValueParser(char splitChar);
    public LineKeyValueParser(string splitRegex);

    public IEnumerable<KeyValuePair<string, string>> Parse(string value);
    public KeyValuePair<string, string> ParseLine(string value);
}

Servus and happy coding! 🥨🍺