正在查找C#正则表达式
本文关键字:正则表达式 查找 | 更新日期: 2023-09-27 18:26:20
我有以下类型的字符串文件路径:
const string s1 = "~/somestring/somestring/somestring/somestring/somestring/someName_987x3474.png";
const string s2 = "~/somestring/somestring/somestring/someOtherName_222x666.png";
const string s3 = "~/somestring/somestring/somestring/somestring/someName_9871x3474_someString.png";
现在我们已经有了一个正则表达式,它可以找到字符串s1和s2(987和222)的图像宽度。它是这样的:
var regex = new Regex(@"(?i)[^/]*?(?<width>'d+)x'd+'..*$");
这个对前两个字符串正确,稍后我可以得到宽度。但对第三个字符串失败了。众所周知,路径将具有任何长度,并且文件名将采用以下格式:
someString_someNumberxsomeNumber.someextension或someString_someNumberxsomeNumber_someString.someextension
目前,我的正则表达式只适用于第一个场景。
我稍后会做这样的事情:
var v = filePaths.Select(f => regex.Match(f)).Where(m => (m.Success || !m.Success))
.Select(m => new MyClass
{
FileUrl = m.Value,
Width = int.Parse(m.Groups["width"].Value, CultureInfo.InvariantCulture),
})
.OrderBy(t => t.Width);
MyClass只包含两个属性FileUrl和Width。这里是FileUrl或m。值应该是文件的名称,即原始路径中最后一个/之后的整个字符串,宽度应该是AxB中的A。例如-987、222或9871。
谢谢。
您似乎只需要使用Path.GetFileName
并对结果使用一个更简单的正则表达式:
var regex = new Regex(@"(?<width>'d+)x'd+");
var v = filePaths
.Select(f => regex.Match(Path.GetFileName(f)))
.Where(m => (m.Success || !m.Success))
.Select(m => new MyClass
{
FileUrl = m.Value,
Width = int.Parse(m.Groups["width"].Value, CultureInfo.InvariantCulture),
})
.OrderBy(t => t.Width);