从字符串 C# 正则表达式中提取标记

Extract tokens from the string C# regex

我得到了需要用竖线分隔的字符串 |。

在下面的示例中,数字标记可以在不包含任何内容的情况下定义,例如 20 和 50,或者可以在 [] 或 {} 中定义。

字符串标记将包裹在 [] 或 {} 中,并且可以包含任何特殊字符,包括 |令牌中的分隔符。他们不能在令牌字符串中包含 [] 或 {}。

[Name1]|20|[Nam|2]|{Na;me,3}|50|[Na|me!@#$%^&*()Finish]|[25]|{67 }

需要将以上字符串提取到以下标记:

名字 1

20

姓名|2

Na;me,3

50

Na|me!@#$%^&*()完成

25

67

我们如何在 C# 中做到这一点?正则表达式是最好的解决方法吗?

您可以使用

提取它们
\[(?<r>[^][]*)]|\{(?<r>[^{}]*)}|(?<r>[^|]+)

regex demo详情:

  • \[(?<r>[^][]*)] - [,然后 [] 之外的任何零个或多个字符捕获到组“r”,然后 ] 字符
  • | - 或
  • \{(?<r>[^{}]*)} - {,然后 {} 之外的任何零个或多个字符捕获到组“r”中,然后 } 字符
  • | - 或
  • (?<r>[^|]+) - 组“r”中捕获的 | 字符以外的任何一个或多个字符。

C# demo:

var text = "[Name1]|20|[Nam|2]|{Na;me,3}|50|[Na|me!@#$%^&*()Finish]|[25]|{67}";
var pattern = @"\[(?<r>[^][]*)]|\{(?<r>[^{}]*)}|(?<r>[^|]+)";
var result = Regex.Matches(text, pattern).Cast<Match>().Select(x => x.Groups["r"].Value);
foreach (var s in result)
    Console.WriteLine(s);

输出:

Name1
20
Nam|2
Na;me,3
50
Na|me!@#$%^&*()Finish
25
67