2 回答
TA貢獻1777條經驗 獲得超10個贊
您可能會做的是使用交替來匹配具有函數和左括號和右括號的部分,或者匹配不匹配可選時間的信號的部分。
在交替中,您可以使用 C# 支持的相同組名稱。
(?<!\S)(?:(?<function>\w+)\((?<signal>Corp\.Signals(?:\.\w+)*)(?:@T(?<time>(?:Start|Mid|End)?(?:[-+](?:\d+(?:\.\d+)?)?|\.\d+))?)?\)|(?<signal>Corp\.Signals(?:\.\w+)*)(?:@T(?<time>(?:Start|Mid|End)?(?:[-+](?:\d+(?:\.\d+)?|\.\d+))?)?)?)(?!\S)
在很大程度上可以看到命名組function,signal以及time
(?<!\S)斷言左邊的不是非空白字符(?:非捕獲組@T(?<time>(?:Start|Mid|End)?(?:[-+](?:\d+(?:\.\d+)?)?|\.\d+))?(?<function>\w+)\(匹配左括號(?<signal>Corp\.Signals(?:\.\w+)*)(?:非捕獲組)?關閉非捕獲組并使其可選\)匹配右括號|或者(?<signal>Corp\.Signals(?:\.\w+)*)(?:@T(?<time>(?:Start|Mid|End)?(?:[-+](?:\d+(?:\.\d+)?|\.\d+))?)?)?與前面的部分相同,沒有函數和括號
)(?!\S)斷言右邊的不是非空白字符

TA貢獻1900條經驗 獲得超5個贊
嘗試以下操作:
string[] inputs = {
"Corp.Signals.LivingRoom.Temperature@TStart",
"int(Corp.Signals.BedRoom.NoiseLevel@T+4)",
"Corp.Signals.LivingRoom.Temperature@TMid+2.3",
"Corp.Signals.LivingRoom.Temperature",
"Corp.Signals.LivingRoom.Temperature@T+",
"Corp.Signals.BedRoom.NoiseLevel@T+4)",
"int([email protected]"
};
//Function(SignalName@Time) sample, Function and Time optional
string pattern = @"^((\w[\w.]+(@T(([+-](\d+|\d*.\d+))|\w+))?)|(\w+\(\w[\w.]+(@T(([+-](\d+|\d*.\d+))|\w+))?\)))$";
foreach (string input in inputs)
{
Match match = Regex.Match(input, pattern);
Console.WriteLine("Success : {0}, Expression : '{1}'", match.Success, input);
}
Console.ReadLine();
- 2 回答
- 0 關注
- 174 瀏覽
添加回答
舉報
