开发者

need to create a C# Regex similar to this perl expression

I was wondering if it is possible to build equivalent C# regular expression for finding this pattern in a filename. For example, this is the expr in perl /^filer_(\d{10}).txt(.gz)?$/i Could we find or extract the \d{10} part so I can use it i开发者_JAVA百科n processing?


To create a Regex object that will ignore character casing and match your filter try the following:

Regex fileFilter = new Regex(@"^filter_(\d{10})\.txt(\.gz)?$", RegexOptions.IgnoreCase),

To perform the match:

Match match = fileFilter.Match(filename);

And to get the value (number here):

if(match.Success)
    string id = match.Groups[1].Value;

The matched groups work similar to Perl's matches, [0] references the whole match, [1] the first sub pattern/match, etc.

Note: In your initial perl code you didn't escape the . characters so they'd match any character, not just real periods!


Yes, you can. See the Groups property of the Match class that is returned by a call to Regex.Match.

In your case, it would be something along the lines of the following:

Regex yourRegex = new Regex("^filer_(\d{10}).txt(.gz)?$");
Match match = yourRegex.Match(input);
if(match.Success)
    result = match.Groups[1].Value;

I don't know, what the /i means at the end of your regex, so I removed it in my sample code.


As daniel shows, you can access the content of the matched input via groups. But instead of using default indexed groups you can also use named groups. In the following i show how and also that you can use the static version of Match.

Match m = Regex.Match(input, @"^(?i)filer_(?<fileID>\d{10}).txt(?:.gz)?$");
if(m.Success)
    string s = m.Groups["fileID"].Value;

The /i in perl means IgnoreCase as also shown by Mario. This can also be set inline in the regex statement using (?i) as shown above.

The last part (?:.gz) creates a non-capturing group, which means that it’s used in the match but no group is created.
I'm not sure if that's what you want, this is how you can do that.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜