我得到了需要用管道分隔的字串|。
可以在下面的示例中定義數字標記而不用像 20 和 50 之類的任何東西來定義,或者可以在 [] 或 {} 中定義。
字串標記將被包裹在 [] 或 {} 中,并且可以包含任何特殊字符,包括 | 令牌內的分隔符。它們不能在令牌字串中包含 [] 或 {}。
[Name1]|20|[Nam|2]|{Na;me,3}|50|[Na|me!@#$%^&*()Finish]|[25]|{67}
需要將以上字串提取到以下標記:
名稱1
20
姓名|2
名字;我,3
50
Na|me!@#$%^&*()完成
25
67
我們如何在 C# 中做到這一點?正則運算式是最好的方法嗎?
uj5u.com熱心網友回復:
您可以使用
\[(?<r>[^][]*)]|\{(?<r>[^{}]*)}|(?<r>[^|] )
請參閱正則運算式演示。詳情:
\[(?<r>[^][]*)]-[,然后是除[并]捕獲到組“r”之外的任何零個或多個字符,然后是一個]字符|- 要么\{(?<r>[^{}]*)}-{,然后是除{并}捕獲到組“r”之外的任何零個或多個字符,然后是一個}字符|- 要么(?<r>[^|] )|- 除了在“r”組中捕獲的字符之外的任何一個或多個字符。
請參閱C# 演示:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444967.html
上一篇:獲取兩個運算式之間的所有匹配項
下一篇:正則運算式:僅允許大寫和特定數字
