Reputation: 53
I got string which needs to be separated by pipe |.
The numeric tokens can be defined without wrapping in anything like 20 and 50 in the example below or could be defined in [] or {}.
The string token will be either wrapped in [] or {} and can have any special characters including | separator within the token. They cannot have [] or {} within the token string.
[Name1]|20|[Nam|2]|{Na;me,3}|50|[Na|me!@#$%^&*()Finish]|[25]|{67}
Need to extract above string to following tokens:
Name1
20
Name|2
Na;me,3
50
Na|me!@#$%^&*()Finish
25
67
How can we do that in C#? Is regular expressions best way to go about it?
Upvotes: 1
Views: 467
Reputation: 626774
You can extract them with
\[(?<r>[^][]*)]|\{(?<r>[^{}]*)}|(?<r>[^|]+)
See the regex demo. Details:
\[(?<r>[^][]*)]
- [
, then any zero or more chars other than [
and ]
captured into Group "r", and then a ]
char|
- or\{(?<r>[^{}]*)}
- {
, then any zero or more chars other than {
and }
captured into Group "r", and then a }
char|
- or(?<r>[^|]+)
- any one or more chars other than a |
char captured in Group "r".See the 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);
Output:
Name1
20
Nam|2
Na;me,3
50
Na|me!@#$%^&*()Finish
25
67
Upvotes: 2