寻找C#正则表达式

时间:2014-10-13 18:51:46

标签: c# regex

我有以下类型的字符串文件路径:

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.Value应该是文件的名称,即原始路径中的最后一个/之后的整个字符串,并且AxB中的宽度应为A.例如 - 987,222或9871。

感谢。

1 个答案:

答案 0 :(得分:2)

看起来您可以使用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);