3

次の文字列をどのように分割しますか?

test, 7535, '1,830,000', '5,000,000'

結果は

test
7535
'1,830,000'
'5,000,000'

私は試します:

Dim S() as string = mystring.split(",")

しかし、私は、

test
7535
'1
830
000'
'5
000
000'

ありがとう

4

4 に答える 4

8

便利で高品質のライブラリが利用できる場合は、CSV を手動で解析しないでください。お願いします!

CSV 解析には多くの潜在的な落とし穴があり、このライブラリは、私のテストによると、それらのほとんどをきれいに解決します。

つまり、これが 1 回限りのタスクであり、文字列が常に例のようになっている場合は、次のように正規表現を使用できます (VB.NET 構文が間違っている可能性があります。修正してください)。

        Dim s as string = "1, 2, '1,233,333', '8,444,555'";
        Dim r as Regex = new Regex(",\s");
        Dim re() as string = r.Split(s);

これは、区切りのコンマの後に常にスペースがあり、数字の間のコンマにスペースがないことを前提としています。常にそうではない場合は、次のことができます。

  • 正規表現をより複雑にします (ここを見て、混乱がどのようになるかを確認してください)
  • 図書館を利用して幸せになろう
于 2009-06-06T10:55:55.480 に答える
2

この例だけで正規表現を使用する必要がない場合、Split関数 (Microsoft.VisualBasic.Strings のメンバー) は文字列を区切り文字として使用できるため、「,」と入力して、後にスペースがあるコンマのみをキャッチします。

    Dim s As String = "1, 2, '1,233,333', '8,444,555'"
    Dim r() As String = Split(s, ", ")
于 2011-06-27T13:58:51.980 に答える
1
Dim words as New List(Of String)()
Dim inQuotes as Boolean
Dim thisWord as String
For Each c as Char in String
    If c = "'"c Then inQuotes = Not inQuotes
    If c = ","c AndAlso Not inQuotes Then
        words.Add(thisWord)
        thisWord = Nothing
    Else
        thisWord &= c
    End If
Next
于 2009-06-06T13:05:22.520 に答える
0

この正規表現を使用してみてください:"('([^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)?"

于 2009-06-06T14:05:08.390 に答える