我有以下字串,我需要獲取字串中的內容。
我嘗試了以下 Regex 。但它帶有外部括號。
輸入字串:
Test (1001,Sunday)
正則運算式模式
Regex : (([^,] ),([^,)] ))
Output : (1001
但我需要如下輸出
match[0]=1001 , match[1] = sunday.
我也嘗試了以下模式,但最終出現了構建警告。
(Test \(([^)] )\)) :
由于轉義序列,我無法在沒有警告的情況下構建它。
上面的正則運算式對我來說很好,但我收到編譯警告

uj5u.com熱心網友回復:
如果你想用正則運算式來做這一切,只需匹配括號部分。
\((\S ?),(\S ?)\)
然后第 1 組將是“1001”,第 2 組將是“星期日”。
var input = "Test (1001,Sunday)";
var pattern = new Regex(@"\((\S ?),(\S ?)\)");
var match = pattern.Match(input);
Console.WriteLine(match.Groups[1].Value);
Console.WriteLine(match.Groups[2].Value);
在這個模式中,我使用\S的是“任何非空白字符”。您可以根據需要更改此設定。例如,如果您知道第一組總是數字,請更改為\d。
另一種不涉及 Regex 的方法(感謝Trevor的想法),它搜索唯一的(和)字符、子字串,并用逗號分隔。
var input = "Test (1001,Sunday)";
var start = input.IndexOf('(') 1; // 1 to avoid including "("
var end = input.LastIndexOf(')');
var data = input[start..end];
var segments = data.Split(',');
foreach (var segment in segments)
{
Console.WriteLine(segment);
}
uj5u.com熱心網友回復:
該模式(([^,] ),([^,)] ))有 3 個捕獲組,例如,組 2 匹配除逗號之外的任何字符[^,] 。
那個否定的字符類也將匹配開頭(
您可能要做的是使用 2 個捕獲組,同時排除括號,并匹配示例字串中的左括號和右括號。
\(([^,()] ),([^,()] )\)
請參閱.NET Regex 演示和C# 演示。
如果括號之間可以有超過 2 個值,則可以使用具有相同名稱的捕獲組和Group.Captures 屬性。
\((?<val>[^,()] )(?:,(?<val>[^,()] ))*\)
模式匹配:
\(匹配((?<val>[^,()] )分組val,匹配 1 次或多次出現的任何字符,除了,()(?:非捕獲組作為一個整體捕獲,從字面上匹配(?<val>[^,()] )再次使用相同的模式對 val 進行分組
)*關閉非捕獲組并可選擇重復以也允許單個值\)匹配)
請參閱.NET 正則運算式演示和C# 演示。
var pattern = @"\((?<val>[^,()] )(?:,(?<val>[^,()] ))*\)";
var str = "Test (1001,Sunday)";
var strings = Regex.Match(str, pattern).Groups["val"].Captures.Select(c => c.Value);
foreach (String s in strings)
{
Console.WriteLine(s);
}
輸出
1001
Sunday
uj5u.com熱心網友回復:
如果你的字串總是模式
a(b,c)
并且您希望 b 和 c 在不同的變數中,僅在多個分隔符上拆分可能是最簡單的:
var input = "Test(1001,sunday)";
var bits = input.Split('(',')',',');
現在你的“1001”bits[1]和“星期天”在bits[2]
您提到您的輸入是一個陣列:
var input = new []{
"Test(1001,sunday)",
"Test(1002,monday)"
};
所以你可以:
var r = input.Select(i => {
var bits = i.Split('(',')',',');
return new { Num = bits[1], Day = bits[2] };
});
這將產生匿名型別物件的列舉,其中每個物件的 Num/Day 屬性中都有您請求的資料
foreach(var a in r)
Console.Write($"Num is {a.Num} and Day is {a.Day}");
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/437258.html
