C# 如何使用linq和C拆分字符串?

C# 如何使用linq和C拆分字符串?,c#,.net,linq,C#,.net,Linq,我想使用Linq拆分和解析字符串。如何从该字符串中提取VID和PID HID\VID_0483&PID_5750\6&28E7587C&0&0000 以下是我目前的代码: var vendorId = UsbSetting.Instance.UsbDeviceInfo.PnpDeviceId.Split('\\').Select(s=> s.Split('&')); 使用下面的代码来解析 字符串s1=@HID\VID_0483&PID_5750\

我想使用Linq拆分和解析字符串。如何从该字符串中提取VID和PID

HID\VID_0483&PID_5750\6&28E7587C&0&0000
以下是我目前的代码:

var vendorId = UsbSetting.Instance.UsbDeviceInfo.PnpDeviceId.Split('\\').Select(s=> s.Split('&'));
使用下面的代码来解析 字符串s1=@HID\VID_0483&PID_5750\6&28E7587C&0&0000

var vendorId = UsbSetting.Instance.UsbDeviceInfo.PnpDeviceId.Split('\\', '&').
                        SingleOrDefault((s) => s.Contains(UsbInfo.Vid.Description()))?.
                        Replace(UsbInfo.Vid.Description()+"_", ""); 

var productId = UsbSetting.Instance.UsbDeviceInfo.PnpDeviceId.Split('\\', '&').
                        SingleOrDefault((s) => s.Contains(UsbInfo.Pid.Description()))?.
                        Replace(UsbInfo.Pid.Description() + "_", "");

在这种情况下,正则表达式分组非常有用:

//group VID or PID followed by _ and 4 digits
string pattern = @"(\bVID|\bPID)_(\d{4})"; 
MatchCollection matches = Regex.Matches(input, pattern);
string vendorID = matches[0].Groups[2].Value;
string productID = matches[1].Groups[2].Value;

正则表达式似乎更适合这个问题。@JosephCenk:要使用Linq拆分和解析字符串吗。但是弦。斯普利特不是林克。对不起,林克是哪一部分?谁在乎。我的答案解决了问题。接下来有人会问如何用Linq将1赋值给整数。。。如果你只有一把锤子,一切看起来都像钉子。
//group VID or PID followed by _ and 4 digits
string pattern = @"(\bVID|\bPID)_(\d{4})"; 
MatchCollection matches = Regex.Matches(input, pattern);
string vendorID = matches[0].Groups[2].Value;
string productID = matches[1].Groups[2].Value;