0
if (Regex.IsMatch(line, "^([\\w\\-\\ ]+)\\ ,([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)", RegexOptions.IgnorePatternWhitespace))

上記で動作するようにignorepatternwhitespaceを取得するにはどうすればよいですか。通常は @" .... " で動作しますが、引用符とバックスラッシュの量が多いため、" ... " を使用し、@" ... " の代わりにバックスラッシュでエスケープし、引用符を 2 倍にしました。しかし今では、きちんとした小さなブロックではなく、巨大な線としてのみ機能します。

4

1 に答える 1

1

その理由は、言語仕様により、通常の文字列リテラル ( ) が複数行にまたがることが禁止されているためです。つまり、埋め込まれたリテラルの改行文字"Normal String Literal"を含めることはできません。

このようなアットストリング

@"This
string
spans
lines
"

上記のように複数の行にまたがる場合があります。

できることは、C# の定数折りたたみを利用して、次の行に沿って文字列を作成することです。

Regex foo = new Regex(
                    " part 1"
                  + " part 2"
                  + " part 3"
                  + ...
                , RegexOptions.IgnorePatternWhitespace
                ) ;
于 2013-07-17T17:39:46.063 に答える