在该项目中,我目前正在研究在触发事件中捕获来自各种来源的信号。为了分析信号,我们想要使用一些查询并为我们的信号提出命名约定。我们希望使用 RegEx 来验证一致性以及拆分信号字符串的各个部分。
信号需要具有以下结构:
Function(SignalName@Time)
Function 和 @Time 是可选的,但 SignalName 始终是必需的。
一些示例:
Corp.Signals.LivingRoom.Temperature@TStart //temperature of living room at start of event
Corp.Signals.LivingRoom.Temperature //missing time stamp will default to start of event
int(Corp.Signals.BedRoom.NoiseLevel@T+4.20) //integral of bed room noise from Start to 4.20 seconds into the event
Corp.Signals.Kitchen.Light@TEnd-.5 //state of the kitchen light 0.5 seconds before the end of the event
到目前为止我想出了这个正则表达式:
(?<open>(?<function>\w+)\(|)(?<signal>Corp\.Signals\.\w+\.\w+)(?:@T(?<time>((Start|Mid|End|)([-+]\d?(\.\d+)?)?))|)(?<-open>\)|)
到目前为止,这工作得很好,但仍然匹配不属于命名方案的字符串。
没有功能但末尾带有右括号的信号:
Corp.Signals.BedRoom.NoiseLevel@T+4)
我不确定为什么会消耗它,因为“开放”平衡组没有捕获任何内容。最后的parenteses怎么能消耗掉呢?
具有函数但缺少右括号的信号。
int(Corp.Signals.LivingRoom.Temperature@T-.2
仅具有部分时间戳的信号(缺少时间)
Corp.Signals.LivingRoom.Temperature@T+
不负相思意
梵蒂冈之花
相关分类