从字符串中提取年份

时间:2013-07-18 15:58:18

标签: c# string substring

我的格式为:

AM Kaplan, M Haenlein - Business horizons, 2010 - Elsevier
A Lenhart, K Purcell, A Smith, K Zickuhr - 2010 - pewinternet.org

想抽出年份。

我正在使用:

year = year.Substring(year.LastIndexOf(",") + 1, year.LastIndexOf("-") - 1).Trim();

但是得到长度错误,当最后一个索引需要' - '表示子串的开头而不是','时,这也会破坏。

如何正确提取年份?

3 个答案:

答案 0 :(得分:2)

以下表达式验证authors - optionalPublisher year - site格式的字符串:

var s = "AM Kaplan, M Haenlein - Business horizons, 2010 - Elsevier";

var match = Regex.Match(s, @".+ - .*(\d{4}) - .+");
if (match.Success)
{
     var year = match.Groups[1].Value;
}

答案 1 :(得分:0)

s = 'A Lenhart, K Purcell, A Smith, K Zickuhr - 2010 - pewinternet.org'

如果年份总是在逗号分隔的字符串的最后一个元素中,并且总是在两个连字符之间,那么你可以做一些简单的事情,比如

last = s.split(',')[-1]
year = int(last.split(' - ')[1])

s.split(delimiter)将字符串转换为list对象,其中列表中的每个元素都是由s分隔的delimiter子字符串,在您的情况下是逗号和连字符。

答案 2 :(得分:0)

看起来年份显示为逗号分隔字符串的最后一个元素,但它并不总是落在两个连字符之间。看起来它出现在最后一个连字符之前。如果情况总是这样,那就可以了:

    int ExtractYear(string delimitedString)
    {
        // Only works if Year appears in the last split field of the delimitedString
        // and also Year is the 2nd to last sub-field of that last field.
        var fields = delimitedString.Split(new char[] {','});
        var subfields = fields.Last().Split(new char[] {'-'});
        int result = 0; 
        // -1 denotes bad value
        return int.TryParse(subfields[subfields.Length - 2], out result) ? result : -1;
    }