我在使用正则表达式的时候非常糟糕,因此在解析字符串时,我通常会使用糟糕的kludges和变通方法。我需要更好地使用正则表达式。这个对我来说似乎很简单,但我甚至不知道从哪里开始。
这是我设备输出的字符串:
testString = IP:192.168.5.210\rPlaylist:1\rEnable:On\rMode:HDMI\rLineIn:unbal\r
实施例: 我想知道设备是关闭还是打开。我需要搜索字符串"启用:"然后找到回车符并确定Enable:和\ r \ n之间的单词是关闭还是打开。这似乎是正则表达式的用途,或者我完全误解了它。
有人能指出我正确的方向吗?
其他信息 - 也许我需要扩展这个问题。
根据答案,查找设备是否已启用似乎相当简单。因为我得到的返回字符串类似于键/值对,所以确定:和回车符之间的子字符串更令人烦恼。许多这些对具有长度变化很大的响应,例如DeviceLocation,DeviceName,IPAddress。事实上,设备通过返回整个状态列表,48个键/值对来响应发送给它的每个命令,然后我必须解析它,即使我只需要知道一个属性。
同样基于你的答案....正则表达式不是你要去的方式。
感谢您的帮助。 规范
答案 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]);