2

私は正規表現に非常に慣れていないので、質問の「noobyness」についてお詫びします...私は仕事で使用するIDのパターンを一致させる必要があります。

これまでのところ、パターンの唯一の仕様は、9文字の長さで、大文字と数字で構成されていることです。IDには、文字列の全長が9文字である限り、1文字または任意の数の大文字または数字を含めることができます。

これまでのところ、私は次のことをしています... [AZ] [0-9] {9}これは、文字列が少なくとも1文字または数字であることを確認しません(したがって、9文字の長さの文字列が通過します)...ああ、確かに非大文字で作られた9文字の単語と一致しました。

私はかなりのグーグルをしました、しかし私は私が理解するのに十分に唖然としたものを見つけませんでした。

どんな助けでも非常に高く評価されました:)

ありがとう

編集:要件を要約するために-IDは9文字の長さである必要があり、それ以上でもそれ以下でもありません。大文字と数字で構成されます。IDにそれぞれが少なくとも1つ含まれている限り、文字または数字のいずれかの量を指定できます(つまり、BH98T6YUOまたはR3DBLUEEEまたは1234R6789

また、ビットが間違っていないことを確認するためにコードを投稿します... ??

 string myRegex = "A ton of different combinations that i have tried";
 Regex re = new Regex(myRegex);

        // stringCombos is a List<string> containing all my strings
        // The strings contain within them, my id
        // I am attempting to pull out this id 
        // the below is just to print out all found matches for each string in the list 
        foreach (string s in stringCombos)
        {
            MatchCollection mc = re.Matches(s);
            Console.WriteLine("-------------------------");
            Console.Write(s);
            Console.WriteLine("  ---  was split into the following:");
            foreach (Match mt in mc)
            {
                Console.WriteLine(mt.ToString());
            }
        }
4

2 に答える 2

3

あなたは実際に言語として正規表現を学ぶ必要があります。カーブは少し急ですが、基本的なチュートリアルがたくさんあります。また、これはチャットの状況で発生する可能性があります SOにはチャット機能があります)-それが私が最初にそれらを学んだ方法です...

私はこれがあなたの場合にうまくいくかもしれないと思います:

[A-Z0-9]{1,9}

アップデートによると、正確に9つの要素については、次を使用します。

[A-Z0-9]{9}

ただし、このソリューションでは、少なくとも1つの文字と少なくとも1つの数字を含めるという要件は表現されていないことに注意してください。これを行う簡単な方法は、最初の一致に2番目と3番目の一致を適用することです。

[0-9]*[A-Z][0-9]*
[A-Z]*[0-9][A-Z]*

これにより3回マッチング。凝った前方および後方参照のものでこの結果を得ることができるかもしれませんが、正規文法でその要件を実際にキャプチャすることはできません。

于 2012-06-27T11:18:32.680 に答える
2

^と$を使用して文字列の最初と最後を一致させる必要があります。これは、10文字ではなく9文字と一致することを意味します。

^[0-9A-Z]$

上記の一致が大文字または数字の9文字に一致するという要件については明確ではありません。

Expressoは自分の表現を試すのに役立つ かもしれません。

編集(新しい要件がある場合)最低1文字の大文字が必要な場合は、次を使用できます。

\b[0-9A-Z]{8}(?:(?<=.*[A-Z].*)[0-9]|(?<=.*[0-9].*)[A-Z])\b

壊す

\b単語の境界に一致する

[0-9A-Z]{8}大文字または数字のいずれかである8文字

(?:非キャプチャグループを開始します。これは、または条件を囲むためです。

(?<=.*[A-Z].*)[0-9][0-9A-Z]{8}これは、最初のキャプチャでその前のどこかにAZがある限り、基本的に[0-9]と一致します。

|また

(?<=.*[0-9].*)[A-Z][0-9A-Z]{8}これは、最初のキャプチャでその前のどこかに0〜9がある限り、基本的に[AZ]と一致します

)非キャプチャグループを閉じる

\b単語の境界に一致する

基本的に最初の8文字で一致を行い、9番目の文字が数字の場合は最初の8文字が大文字である必要があり、9番目がAZの場合は最初の8文字が数字である必要があります

新しい編集バージョンでは、文字列が完全に一致する必要はなく、文字列内に表示されるIDが検出されるようになりました。

于 2012-06-27T11:23:48.840 に答える