正在查找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。

谢谢。

正在查找C#正则表达式

您似乎只需要使用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);