2011-10-28 18 views
2

私は数週間前に特定の部分文字列に基づいて文字列を分割する方法について尋ねました。しかし、今私は少し違うことをしたいと思っています。私は次のような行を持っています。(書式についてはごめんね)文字列の一部を除外する正規表現

私がしたいのは、この行をすべての改行列で分割することです。しかし、私はPA41のラインの1つの後にPA42がある場合、これをしたくありません。 PA41とそれに続くPA42行を同じ行にしたい。私は無駄にいくつかの正規表現を使用してみました。私が探している出力は、理想的には次のようになります:

これは私が現在使っている正規表現ですが、探しているものを達成していません。

string[] p = Regex.Split(parameterList[selectedIndex], @"[\r\n]+(?=PA41)"); 

説明が必要な場合は、お気軽にお問い合わせください。

答えて

3

あなたが肯定先読みをしようとしている、あなたはマイナス1をしたいです。 (正、負のはそれがないを保証する一方でない。、パターンフォローを行うことを保証する)

(\\r\\n)(?!PA42) 

ワークスfor me

+0

ありがとうございます。何らかの理由でこの式を使用すると、実際に分割していないのは、@ "(\ r \ n)(?! PA42)"を使用しない限りです。ただし、\ r \ nもPA ##行の最後に保存するのではなく、別の行に分割しています。 – almostProgramming

+0

@almostProgramming: "\ r \ n"文字は文字通り '\'、次に 'n'または' r'ですか?またはキャリッジリターンとラインフィードですか?それはパターンのすべての違いを作るだろうが、私はあなたが彼らが質問のために砦を示している場合、またはそれらが文字であるかどうかわからない。 –

+0

実際には改行と改行です。申し訳ありませんが、私はその質問に明確にすべきでした。 – almostProgramming

3
string[] splitArray = Regex.Split(subjectString, @"\\r\\n(?!PA42)"); 

これは機能するはずです。これは、ネガティブ先読みアサーションを使用して、\ r \ nシーケンスにPA42が続くことを保証します。

説明:

@" 
\\   # Match the character “\” literally 
r   # Match the character “r” literally 
\\   # Match the character “\” literally 
n   # Match the character “n” literally 
(?!  # Assert that it is impossible to match the regex below starting at this position (negative lookahead) 
    PA42  # Match the characters “PA42” literally 
) 
" 
+0

迅速な回答ありがとうございます。 – almostProgramming

+0

@amostProgramming問題はありません。私は理解できないのに、なぜあなたはそれを受け入れなかったのですか? – FailedDev

+0

私は複数の答えを受け入れることができたら、私はします。 :) – almostProgramming

関連する問題