从字符串 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
我得到了需要用竖线分隔的字符串 |。
在下面的示例中,数字标记可以在不包含任何内容的情况下定义,例如 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