问题描述
-
GMT-05:00 Eastern Time(Toronto)
-
(GMT - 06:00) Central Time(US,Canada)
-
GMT-10:00 Hawaii - Aleutian Standard Time(Honolulu)
我希望以上字符串的答案像这样:
-
-05:00
-
-06:00
-
-10:00
我有一个正则表达式[^0-9-:+]
,它给出了第一个和第二个示例所需的答案,但是对于第三个示例,它的结果为-10:00-
请帮助我建立所需的Regex来获取偏移量。
解决方法
您可以使用
\bGMT\s*([-+]?)\s*(\d+:\d+)
请参见regex demo。详细信息:
-
\bGMT
-整个词GMT
-
\s*
-超过0个空格 -
([-+]?)
-第1组:可选的-
或+
-
\s*
-超过0个空格 -
(\d+:\d+)
-1位数以上,:
,1位数以上。
然后,您需要合并两个组以获得最终值:
var strs = new String[] {"GMT-05:00 Eastern Time(Toronto)","(GMT - 06:00) Central Time(US,Canada)","GMT-10:00 Hawaii - Aleutian Standard Time(Honolulu)"};
foreach (var s in strs)
{
var result = Regex.Match(s,@"\bGMT\s*([-+]?)\s*(\d+:\d+)");
if (result.Success) {
Console.WriteLine($"Parsing '{s}'\nResult: {result.Groups[1].Value}{result.Groups[2].Value}");
}
}
请参见C# demo,输出:
Parsing 'GMT-05:00 Eastern Time(Toronto)'
Result: -05:00
Parsing '(GMT - 06:00) Central Time(US,Canada)'
Result: -06:00
Parsing 'GMT-10:00 Hawaii - Aleutian Standard Time(Honolulu)'
Result: -10:00
,
尝试使用正则表达式[+-]?\s?\d{2}:\d{2}
来匹配可选符号,然后匹配两个十进制序列
此正则表达式将为您带来预期的结果:
[\+|-]?\s*\d+:\d+
此外,它还会考虑可能的空格