从特定的字符串模式中提取一部分

本文关键字:提取 一部分 模式 字符串 | 更新日期: 2023-09-27 18:15:00

如何从下面的字符串中获得时差,我想用(-3.30)

[UTC - 3:30] Newfoundland Standard Time

以及如何从下面的字符串

获取null
[UTC] Western European Time, Greenwich Mean Time

,我想在字符串

下面得到+3.30
[UTC + 3:30] Iran Standard Time

从特定的字符串模式中提取一部分

正则表达式:

'[UTC(['s-+0-9:]*)']

第一组为- 3:30。(空格)

var regex = new Regex(@"'[UTC(['s-+0-9:]*)']");
var match = regex.Match(inputString);
string timediff;
if(match.Groups.Count > 0)
    timediff = match.Groups[1].Value.Replace(" ", String.Empty); // if you don't want those spaces
else
    // no timediff here

您可以使用:

提取相关部分
Assert(input.StartsWith("[UTC",StringComparison.InvariantCultureIgnoreCase));
string s=input.Substring(4,input.IndexOf(']')-4).Replace(" ","");

要获取以分钟为单位的偏移量,请使用:

if(s=="")s="0:00";
var parts=s.Split(':');
int hourPart=int.Parse(parts[0], CultureInfo.InvariantCulture);
int minutePart=int.Parse(parts[1], CultureInfo.InvariantCulture);
int totalMinutes= hourPart*60+minutePart*Math.Sign(hourPart);
return totalMinutes;

既然您只对数字感兴趣,那么您也可以使用这个

  String a = "[UTC - 3:30] Newfoundland Standard Time";
  String b = "[UTC] Western European Time, Greenwich Mean Time";
  String c = "[UTC + 3:30] Iran Standard Time";
  Regex match = new Regex(@"('+|'-) [0-9]?[0-9]:[0-9]{2}");
  var matches = match.Match(a); // - 3:30
  matches = match.Match(b); // Nothing
  matches = match.Match(c); // + 3:30

还支持+10小时偏移

试试这个:

    public string GetDiff(string src)
    {
        int index = src.IndexOf(' ');
        int lastindex = src.IndexOf(']');
        if (index < 0 || index > lastindex) return null;
        else return src.Substring(index + 1, lastindex - index -1 )
                       .Replace(" ", "").Replace(":", ".");
    }