0

正規表現を使用して、テキストから次の形式のメソッドを解析しようとしています。

mvAddSell[value, type1, reference(Moving, 60)]

正規表現を使用して、次のことを行っています

tokensizedStrs = Regex.Split(target, "([A-Za-z ]+[\\[ ][A-Za-z0-9 ]+[ ,][A-Za-z0-9 ]+[ ,][A-Za-z0-9 ]+[\\( ][A-Za-z0-9 ]+[, ].+[\\) ][\\] ])");

動作していますが、問題は、文字列が指定された形式のメソッドで始まっている場合は常に最初に空の配列が表示され、最後にある場合も同じことが発生することです。また、文字列に2つのメソッドが含まれている場合、最初のメソッドのみをキャッチします。何故ですか ?

パーサーが2つのメソッドをキャッチしない原因は、パターンに「。+」が存在することだと思います。私がやりたかったのは、その場所にいくつかの日付があることを伝えたいということです。一連の文字があると言いますが、それは間違っていますか?


それは、e =Dでwoooorked...私は"。+"を"。+?"に置き換えました これは、任意の数の文字をできるだけ少なくすることを意味しました;)

4

1 に答える 1

1

あなたの目標は私にはかなり不明確です。その結果、あなたは何を望みますか?そのメソッド パターンで分割すると、パターンの前の部分とパターンの後の部分が配列で取得されますが、メソッド自体は取得されません。

ご質問への回答

具体的な質問に答えるには:あなた.+は貪欲です。つまり、最後まで何でも一致します)](同じ行で.は、デフォルトでは改行文字と一致しません)。
量指定子の後にa を追加して遅延させることで、この動作を変更できます。?その後、最初の までのみ一致し)]ます。

tokensizedStrs = Regex.Split(target, "([A-Za-z ]+[\\[ ][A-Za-z0-9 ]+[ ,][A-Za-z0-9 ]+[ ,][A-Za-z0-9 ]+[\\( ][A-Za-z0-9 ]+[, ].+?[\\) ][\\] ])");

正規表現の問題

正規表現には他にもいくつかの問題があります。

  1. たとえば、と書くときに、文字クラスを誤解していると思います[\\[ ]。この構文は、a[またはスペースのいずれかに一致します。の後にオプションのスペースを許可したい場合は[(私にとっては論理的です)、次のようにします。\\[\\s*

  2. @過度のエスケープを避けるために、逐語的な文字列 (先頭に を付けたもの) を使用して正規表現を定義します。

    tokensizedStrs = Regex.Split(target, @"([A-Za-z ]+\[\s*[A-Za-z0-9 ]+\s*,\s*[A-Za-z0-9 ]+\s*,\s*[A-Za-z0-9 ]+\(\s*[A-Za-z0-9 ]+\s*,\s*.+?\)s*\]\s*)");
    
  3. 部分の繰り返しを避けることで、正規表現を簡素化できます

    tokensizedStrs = Regex.Split(target, @"([A-Za-z ]+\[\s*[A-Za-z0-9 ]+(?:\s*,\s*[A-Za-z0-9 ]+){2}\(\s*[A-Za-z0-9 ]+\s*,\s*.+?\)s*\]\s*)");
    

    (?:\s*,\s*[A-Za-z0-9 ]+){2}これは、 2 回繰り返される非キャプチャ グループです。

于 2012-06-11T08:05:17.827 に答える