使用关键字提取特定字段

时间:2016-03-18 01:36:09

标签: c# regex

我正在尝试将以下字符串与安全系统的接口匹配:

*3824 04:57:04 24/02/16 ALARM(DC4) Input 1 (SI)Main Door Opened(DC2)

请注意,(DC4) / (SI) / (DC2)只是ASCII字符的可视化表示,因此串行端口上的输入将是单个字节,而不是4/5字节

系统将继续以与上述类似的格式发送消息,我需要检查每个消息并查看是否需要进一步处理。

单词ALARM是我的关键字,所以如果没有ALARM的消息出现,那么我将忽略它(MATCH失败)。

如果消息中出现单词ALARM,那么我需要获取事件的位置并传递到我的应用程序中的其他层。

样品1 * 3824 04:57:04 24/02/16报警(DC4)输入1(SI)主门打开(DC2)

样本2 * 3824 04:57:04 24/02/16报警(DC4)输入2(SI)后门打开(DC2)

所以我需要在(SI)和(DC2)ASCII字符之间提取所有内容作为字符串以便进一步处理。

因此消息1将匹配“打开主门”,消息2将匹配“后门打开”。

如果匹配成功,应用程序中的其他层将从相应的Group#字段中提取此字符串。

谢谢,

丹尼尔。

2 个答案:

答案 0 :(得分:0)

试试这个:

([A-Z]+)(?:[^\)]+.){2}([^\(]+)

Regex101

输入:

*3824 04:57:04 24/02/16 ALARM(DC4) Input 1 (SI)Main Door Opened(DC2)

输出:

MATCH 1
1.  [24-29] `ALARM`
2.  [47-63] `Main Door Opened`

答案 1 :(得分:0)

这是第1组中的完全匹配:

ALARM\(DC4\).*\(SI\)(.*)(?=\(DC2\))