微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决正则表达式获取偏移量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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。