正则表达式获取偏移量c#

问题描述

我有3个示例字符串(时区),我想获取它们的(偏移量)。

  1. GMT-05:00 Eastern Time(Toronto)
  2. (GMT - 06:00) Central Time(US,Canada)
  3. GMT-10:00 Hawaii - Aleutian Standard Time(Honolulu)

我希望以上字符串的答案像这样:

  1. -05:00
  2. -06:00
  3. -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}来匹配可选符号,然后匹配两个十进制序列

Example

,

此正则表达式将为您带来预期的结果:

[\+|-]?\s*\d+:\d+

此外,它还会考虑可能的空格

Examples