0

これは簡単なことですが、私はこれを理解できません。この正規表現で部分文字列を見つけたいです。「M4N 3M5」に一致しますが、以下には一致しません:

const string text = "asdf M4N 3M5 adsf";
Regex regex = new Regex(@"^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$", RegexOptions.None);
Match match = regex.Match(text);
string value = match.Value; 
4

2 に答える 2

6

^ と $ を削除してみてください:

Regex regex = new Regex(@"[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}", RegexOptions.None);
  • ^ : 一致は文字列または行の先頭から開始する必要があります。
  • $ : 一致は、文字列の末尾か、行または文字列の末尾の \n の前に発生する必要があります。

単語の境界でのみ一致させたい場合は、Mike Strobel の提案に従って \b を使用できます。

    Regex regex = new Regex(@"\b[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}\b", RegexOptions.None);
于 2013-06-21T03:53:30.133 に答える
2

私はこの質問が答えられたことを知っていますが、あなたのパターンで強調したい2つのことに気付きました:

  1. トークンの単一インスタンスについて言及する必要はありません。

    例: (欠落に注意してください{1})

    \d{1} = \d

    [AZ]{1} = [AZ]

  2. また<space>、誤ってバックスペースが押された場合、間違いを理解できず、実行中のコードが機能しなくなる可能性があるため、代わりに「\ s」を使用してパターンに入力することはお勧めしません。

\b個人的には、この場合はここに最適なので、使用することをお勧めします。

于 2013-06-21T05:26:31.477 に答える