我的格式为:
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();
但是得到长度错误,当最后一个索引需要' - '表示子串的开头而不是','时,这也会破坏。
如何正确提取年份?
答案 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;
}