約束します、しばらくの間、私の正規表現の質問の最後です。..本当。
私はどういうわけか、改行をすべきでないときに、いくつかの一致に改行を入れています。それは私が誤解しているものであると確信しています。または、取得しているデータは期待したものではありません。(これは可能です..!)
私は定義された正規表現を持っています:
new Regex(@"^\s*[0-9]{4}[A-Z]{2}[\s\*]\s*(?<token>.*?)\-(?<value>.*?)$", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
取得したドキュメント/文字列は、次のような時折の行でフォーマットされています。
0000AA Token1 - Value
0000AA Token2 - Value
0000AA Token3 - Value
0000AA Another Tok- Value
このようにすべてのトークンを順番に取得すると、上記の正規表現がうまく機能します。4 つの一致があります。
Match# <token> <value>
1 Token1 Value
2 Token2 Value
3 Token3 Value
4 Another Tok Value
これはいい。ただし、次のように、トークンの行が欠落しているファイルがユーザーから送信されることがあります。
0000AA Token1 - Value
0000AA Token2 - Value
0000AA Token3 - Value
0000AA
0000AA Another Tok- Value
これが発生すると、正規表現は次の値を提供します。
Match# <token> <value>
1 Token1 Value
2 Token2 Value
3 Token3 Value
4 0000AA Another Tok Value
その理由はわかっています。上の行から始まる #4 のトークンと一致しています。ただし、「トークン」のグループ化を に変更しても、「トークン」(?<token>[^\n]*?)
で同じ値が得られます。
明らかな何かが欠けているように感じます。すべきではないときに改行を一致させていました。私よりも多くの人々がそれをめぐって騒ぎました。着信文字列を確認しました-改行は ARE\n
であり、 ではありません\r\n
が、他に何か問題があるのではないかと考えています。
乾杯 - マイク。