0

以下のリストに示すように、結果を返すパターンを作成しようとしています。

Help # 7256
Help # 83930
ph  # 7222
this is a test example
Help # 029299
New # 92929

出力:

Help # 7256 
Help # 83930 
Help # 029299

ヘルプで始まり、#記号が続き、その後に3、4、5桁の値が続くもの

私はこのようなことを試みました

Regex pattern = new Regex(@"(Help #) (^|\D)(\d{3, 4,5})($|\D)");

誰かがこのパッテンの作成を手伝ってくれませんか?(C#で)

4

3 に答える 3

3
/^Help\s*#\s*(\d{3,5})/gm

デモ

Help # 0292996文字が含まれていますが、これもOPで指定されているように一致することを付け加えておきます。

3 ~ 5 文字だけを一致させたい場合は、次のようにします。

/^Help\s*#\s*(\d{3,5})\b/gm

デモ

: " " のみを一致させたい場合はHelp[SPACE]#[SPACE]number、単にすべての\s*'s を削除してください。

于 2013-01-25T16:40:50.390 に答える
2

で始まるすべての行を取得したいHelp #(その後に何が来るかに関係なく)、入力ファイルの形式が一貫していると仮定した場合の簡単な解決策:

if (currentLine.StartsWith(@"Help #"))
{
    // Do something with the line
}

String.StartsWithメソッドのリファレンス。

正規表現ソリューションが必要な場合は、正規表現を (リテラル文字列で) 示します。

@"^Help #\s+(\d+)"

これはRegex.Match(String)で使用できます。キャプチャ グループ 1 から番号を取得できます。これは、 で始まり、Help #その後に任意の数のスペースが続き、少なくとも 1 桁の数字が続く行にのみ一致します。この正規表現は、ファイルを 1 行ずつスキャンする場合にのみ使用できます。

3 ~ 5 桁に制限する必要がある場合:

@"^Help #\s+(\d{3,5})"
于 2013-01-25T16:40:36.173 に答える
1

C# の場合、これを試してください。

var list = new string[] { 
    "Help", "Help # 7256", "Help # 83930", 
    "ph # 7222", "this is a test example", 
    "Help # 029299", "New # 92929",
    "Help # 7256 8945", "Help # 83930 8998 787989"
};

// bear in mind that the $ at the end matches only these strings
// if you want it to match something like Help # 1284 12841 0933 SUBJECT HERE"
// then remove the $ from the end of this pattern
const string pattern = @"^(Help)\s#\s(\d{3,6})\s?(\d{3,6})?\s?(\d{3,6})?$";

var regex = new Regex(pattern);
foreach (string s in list)
{
    if (regex.Match(s).Success)
        Console.WriteLine(s);
}
Console.WriteLine("Done.");
Console.ReadKey();

出力:

Help # 7256
Help # 83930
Help # 029299
Help # 7256 8945
Help # 83930 8998 787989
于 2013-01-25T16:56:05.537 に答える