-1

I have the following code to parse by Regex:

        const string patern = @"^(\p{L}+)_";
        var rgx = new Regex(patern);
        var str1 = "library_log_12312_12.log";
        var m = rgx.Matches(str1);

It returns only one match and it is "library_". I have read a lot of resources and it should not contain underscore, should it?

4

3 に答える 3

4

パターンにはが含まれている_ので、一致も含まれます。グループのみが必要な場合は、それを指定する必要があります。それはグループ1になります(グループ0は常に完全に一致するため):

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        var regex = new Regex(@"^(\p{L}+)_");
        var input = "library_log_12312_12.log";
        var matches = regex.Matches(input);
        var match = matches[0];
        Console.WriteLine(match.Groups[0]); // library_
        Console.WriteLine(match.Groups[1]); // library
    }
}
于 2013-01-16T14:48:33.113 に答える
0

正規表現は基本的に1つ以上のUnicode文字で終わり、その後にアンダースコア(Unicode文字ではありません)が続きます。_

キャプチャされたグループには、は含まれません_

期待どおりに動作します。

于 2013-01-16T14:48:38.780 に答える
0

正規表現の場合と同様に、アンダースコアを含める必要があります。

結果としてのみ取得したい場合はlibrary、結果の最初のサブグループにアクセスする必要があります。

var m = rgx.Matches(str1).Cast<Match>().Select(x => x.Groups[1].Value);
于 2013-01-16T14:49:08.280 に答える