Regex reg = new Regex(@"^(?:(?<C0>Message) from (?<C1>\S+) (?<C2>\S+\[(?<N1>\d+)\]) to (?<C3>\S+) (?<C4>\S+\[(?<N2>\d+)\]) (?<C5>.+))$");
Match m = reg.Match("Message from device type[3] to receiver type[45] done");
var n1 = m.Groups["N1"].Value;//3
var n2 = m.Groups["N2"].Value;//45
您還可以得到n1
,n2
從type[...]
:
Regex reg2 = new Regex(@"\S+\[(\d+)\]");
var n1 = reg2.Match(m.Groups["C2"].Value).Groups[0].Value;
var n2 = reg2.Match(m.Groups["C4"].Value).Groups[0].Value;
//or don't use Regex once you get `type[...]`
var s = m.Groups["C2"].Value.Split(new string[]{"[","]"}, StringSplitOptions.RemoveEmptyEntries);
var t = s[0];//type
var n = s[1];//3
如果使用Regex
來g等僅type
和n
在type[n]
:
Regex reg = new Regex(@"^(?:(?<C0>Message) from (?<C1>\S+) (?<T1>\S+)\[(?<N1>\d+)\] to (?<C3>\S+) (?<T2>\S+)\[(?<N2>\d+)\] (?<C5>.+))$");
var t1 = m.Groups["T1"].Value;//type
var n1 = m.Groups["N1"].Value;//3
var t2 = m.Groups["T2"].Value;//type
var n2 = m.Groups["N2"].Value;//45
有你認爲只是使用IndexOf(「[」)來查找括號?正則表達式是最簡單的解決方案嗎? –
我想留在正則表達式中,因爲我還必須分離文本的其餘部分,所以我只需要添加關於括號的這部分。我現在不想改變一切。 – user2592968