如何从字符串中获取两个数字间的内容?以电影文件名提取年份为例
从电影文件名提取制作年份的C#解决方案
需求是从电影文件名中提取制作年份,例如:
- 输入:
Kingdom.of.Heaven.2005.720p.Dubbed.Film2media - 输出:
2005
当前使用的正则分割代码会拆分所有数字,无法精准提取年份:
string[] result = Regex.Split(str, @"(\d+:)");
实用解决方案
电影年份一般是1900-2099区间的4位数字,可通过精准匹配实现提取:
方案1:匹配区间内的独立4位数字
利用正则断言确保目标数字前后无其他数字,避免和分辨率(如720p)、编号混淆:
using System.Text.RegularExpressions; string fileName = "Kingdom.of.Heaven.2005.720p.Dubbed.Film2media"; Match yearMatch = Regex.Match(fileName, @"(?<!\d)(19\d{2}|20\d{2})(?!\d)"); if (yearMatch.Success) { string extractedYear = yearMatch.Value; // 结果为"2005" }
正则各部分说明:
(?<!\d):负向零宽断言,保证数字前无其他数字19\d{2}|20\d{2}:匹配1900-1999或2000-2099的4位数字(?!\d):负向零宽断言,保证数字后无其他数字
方案2:匹配被分隔符包裹的年份
如果文件名存在其他独立4位数字,可通过匹配年份前后的分隔符(如.)进一步精准定位:
Match yearMatch = Regex.Match(fileName, @"\.(19\d{2}|20\d{2})\.")); if (yearMatch.Success) { string extractedYear = yearMatch.Groups[1].Value; // 提取分组内的年份 }
此正则仅匹配被.包裹的4位年份数字,排除其他位置的干扰数字。
内容的提问来源于stack exchange,提问作者Reza Hosseini
相关产品推荐
相关产品推荐

