gpt4 book ai didi

c# - 如何在 C# 中使用正则表达式解析重复的名称-值对

转载 作者:行者123 更新时间:2023-12-04 07:27:28 25 4
gpt4 key购买 nike

我正在尝试使用 C# 中的正则表达式从文本中解析键/值标记字符串。例如,给定字符串:

stuff{token1:param1}stuff{token2}stuff{token3:param3}stuff
我最终会得到三个捕获组:
(key=token1,value=param1)
(key=token2,value=(null))
(key=token3,value=param3)
我的问题不是编写正则表达式来进行解析,我的问题是将键和值组合在一起。
这是我到目前为止的代码。 (“tokenPattern”被拆分出来只是为了让正则表达式不那么压倒性。)
var text = "{token1:param1}stuff{token2}more stuff{token3:param3}";
var tokenPattern = @"(?<token>[{](?<key>[^:}]*)([:](?<value>[^}]*))?[}])";
var pattern = @"([^{]*" + tokenPattern + ")*.*?";
var match = Regex.Match(text, pattern);
匹配成功,“匹配”变量中产生的感兴趣组是:
? match.Groups["token"].Captures
Count = 3
[0]: {{token1:param1}}
[1]: {{token2}}
[2]: {{token3:param3}}
? match.Groups["key"].Captures
Count = 3
[0]: {token1}
[1]: {token2}
[2]: {token3}
? match.Groups["value"].Captures
Count = 2
[0]: {param1}
[1]: {param3}
因为我的 token 的“值”部分是可选的,所以我找不到将“键”与“值”相匹配的方法。我想,我可以重新解析每个“ token ”捕获的内容,但这似乎有点痛苦。
有没有办法深入“ token ”捕获以找到该特定捕获的关联“键”和“值”(如果有)?

最佳答案

您可以使用更简单的模式来匹配使用 Regex.Matches 的字符串中出现的所有模式。 - 所有必要的字符串都已经分组:

var text = "{token1:param1}stuff{token2}more stuff{token3:param3}";
var pattern = @"\{(?<key>[^:}]*)(?::(?<value>[^}]*))?}";
var matches = Regex.Matches(text, pattern);
foreach (Match m in matches)
{
Console.WriteLine(m.Value);
Console.WriteLine(m.Groups["key"].Value);
Console.WriteLine(m.Groups["value"].Value);
}
C# demoregex demo . \{(?<key>[^:}]*)(?::(?<value>[^}]*))?}火柴
  • \{ - {字符
  • (?<key>[^:}]*) - 组“键”:除 : 之外的零个或多个字符和 }
  • (?::(?<value>[^}]*))? - 可选的非捕获组匹配 :然后对匹配零个或多个字符的“值”进行分组,而不是 }
  • } - }字符。
  • 关于c# - 如何在 C# 中使用正则表达式解析重复的名称-值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68136477/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com