2

反復によって解決できる解決策がある問題がありますが、正規表現とsplit()

本質的にコンマで区切られた文字列(Excelがクリップボードに入れている)があります。セル値にコンマが含まれている場合、セル全体が引用符で囲まれていることに注意してください (おそらく、その文字列内のコンマをエスケープするため)。文字列の例は次のとおりです。

123,12,"12,345",834,54,"1,111","98,273","1,923,002",23,"1,243"

さて、この文字列を個々のセルにエレガントに分割したいのですが、値にコンマを含むセルを分割するため、コンマを区切り文字として使用する通常の分割式を使用できないという問題があります。この問題のもう 1 つの見方は、コンマの前に偶数個の引用符がある場合にのみ、コンマで分割できるということです。

これはループで解決するのは簡単ですが、このロジックをキャプチャできる正規表現.split関数があるかどうか疑問に思っています。この問題を解決するために、ロジック用の決定論的有限オートマトン (DFA) を構築しました。

代替テキスト

問題は次のようになります: DFA で最終状態 (ここでは状態 4) に到達するたびに新しい配列要素 (/s に対応) が生成されるように、この文字列を分割する方法はありますか?

4

2 に答える 2

0

正規表現の使用 (エスケープなし):(?:(?:"[^"]*")|(?:[^,]*))

それを使用して、.NET である Regex.Matches() または他のプラットフォームでの類似物を呼び出します。

上記をさらに次のように拡張できます。^(?:(?:"(?<Value>[^"]*)")|(?<Value>[^,]*))(?:,(?:(?:"(?<Value>[^"]*)")|(?<Value>[^,]*)))*$

これにより、文字列全体が一度に解析されますが、これを機能させるには、名前付きグループとグループごとのマルチキャプチャが必要です (.NET でサポートされています)。

于 2010-12-16T15:10:31.193 に答える
0

適切なコンマの後には偶数の引用符が続きます。VBScript先読みをサポートしています。これで分割してみてください:

",(?=(?:[^""]*""[^""]*"")*[^""]*$)"
于 2010-12-17T03:31:19.707 に答える