gpt4 book ai didi

c# - 使用正则表达式从单行字符串中提取重复模式

转载 作者:行者123 更新时间:2023-12-04 09:13:05 25 4
gpt4 key购买 nike

我有一个如下所示的字符串:

attr one = 1 attr two = 2
我想提取每个 attr x = y (其中 x 和 y 可以是任何 包括空格 ,而不仅仅是数字,例如:attr name = Jonah)。
我尝试了以下模式: Regex pattern = new Regex(@"attr\s+(?<name>.*)\s+=\s+(?<value>.*)")但它在单个匹配项中返回整个字符串并且不将它们分开。
我怎样才能做到这一点?

最佳答案

您可以使用

\battr\s+(?<name>\S*)\s+=\s+(?<value>.*?)(?=\s+attr\s|\z)
regex demo
详情
  • \battr - 一个字attr
  • \s+ - 1+ 个空格
  • (?<name>\S*) - 组“名称”:0 个或多个非空白字符
  • \s+=\s+ - 一个 =用 1+ 个空格包围的字符
  • (?<value>.*?) - 组“值”:除换行符之外的任何 0 个或更多字符尽可能少...
  • (?=\s+attr\s|\z) - 紧随其后的是 1+ 个空格,attr和一个空格,或字符串的结尾。

  • C# demo (假设 names 都是唯一的):
    var text = "attr one = one two three attr two = 3";
    var dct = Regex.Matches(text, @"\battr\s+(?<name>\S*)\s+=\s+(?<value>.*?)(?=\s+attr\s|\z)")
    .Cast<Match>()
    .ToDictionary(p => p.Groups["name"].Value, p => p.Groups["value"].Value);
    foreach (var kvp in dct)
    Console.WriteLine("{0} -> {1}", kvp.Key, kvp.Value);
    输出:
    one -> one two three
    two -> 3

    关于c# - 使用正则表达式从单行字符串中提取重复模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63314056/

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