使用正则表达式查找子字符串的开头和结尾

时间:2016-11-03 22:05:53

标签: c# arrays regex string

我在使用正则表达式的时候非常糟糕,因此在解析字符串时,我通常会使用糟糕的kludges和变通方法。我需要更好地使用正则表达式。这个对我来说似乎很简单,但我甚至不知道从哪里开始。

这是我设备输出的字符串:

testString = IP:192.168.5.210\rPlaylist:1\rEnable:On\rMode:HDMI\rLineIn:unbal\r

实施例: 我想知道设备是关闭还是打开。我需要搜索字符串"启用:"然后找到回车符并确定Enable:和\ r \ n之间的单词是关闭还是打开。这似乎是正则表达式的用途,或者我完全误解了它。

有人能指出我正确的方向吗?

其他信息 - 也许我需要扩展这个问题。

根据答案,查找设备是否已启用似乎相当简单。因为我得到的返回字符串类似于键/值对,所以确定:和回车符之间的子字符串更令人烦恼。许多这些对具有长度变化很大的响应,例如DeviceLocation,DeviceName,IPAddress。事实上,设备通过返回整个状态列表,48个键/值对来响应发送给它的每个命令,然后我必须解析它,即使我只需要知道一个属性。

同样基于你的答案....正则表达式不是你要去的方式。

感谢您的帮助。 规范

2 个答案:

答案 0 :(得分:3)

我建议使用如图所示的简单行,询问其中一行,但也要验证。部分取决于Ken White的建议。

if(input.Contains(":On")){
    //DoWork()
}else{
    if(input.Contains(":Off"))
        //DoOtherWork
}

这假设":On"和":关"即使使用不同的字符串,它也不会出现在字符串中的任何其他位置。

答案 1 :(得分:-1)

请考虑以下代码:

// This regular expression matches text 'Enabled: ' followed by one or more non '\r' followed by '\r'
// RegexOptions.Multiline is optional but MAY be necessary on other platforms.
// Also, '\r' is not a line break. '\n' is.
Regex regex = new Regex("Enable: ([^\r]+)\r", RegexOptions.Multiline);

string input = "IP:192.168.5.210\rPlaylist: 1\rEnable: On\rMode: HDMI\rLineIn: unbal\r";

var matches = regex.Match(input);
Debug.Assert(matches != Match.Empty);

// The match variable will contain 2 Groups:
// First will be 'Enabled: On\r'
// The other is 'On' since we enclosed ([^\r]+) in ().
Console.WriteLine(matches.Groups[1]);