2

我有以下格式的字符串:

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();

但是有长度错误,当需要的最后一个索引是“-”作为子字符串的开头而不是“,”时,这也会中断。

如何正确提取年份?

4

3 回答 3

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;
}
于 2013-07-18T16:04:35.440 回答
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,在您的情况下是逗号和连字符。

于 2013-07-18T16:02:28.043 回答
0

看起来年份显示为逗号分隔字符串的最后一个元素,但它并不总是介于 2 个连字符之间。它看起来像它出现在最后一个连字符之前。如果总是这样,这有效:

    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;
    }
于 2013-07-18T16:32:42.827 回答