0

コンマを含む列の引用符なしで生成される、非常に複雑な csv を解析しようとしています。
私が得た唯一のヒントは、前後に空白を含むコンマがフィールドに含まれていることです。

Jake,HomePC,Microsoft VS2010, Microsoft Office 2010

に解析する必要があります

Jake
HomePC
Microsoft VS2010, Microsoft Office 2010

列の本文に「\s」と「\s」を含める方法について、誰かアドバイスをお願いします。

4

3 に答える 3

2

お使いの言語が後読みアサーションをサポートしている場合は、分割してください

(?<!\s),(?!\s)

C# の場合:

string[] splitArray = Regex.Split(subjectString, 
    @"(?<!\s) # Assert that the previous character isn't whitespace
    ,         # Match a comma
    (?!\s)    # Assert that the following character isn't whitespace", 
    RegexOptions.IgnorePatternWhitespace);
于 2012-07-13T13:13:20.657 に答える
0

r "(?!\ s +)、(?!\ s +)"で分割

Pythonでは、次のように実行できます

import re
re.split(r"(?!\s+),(?!\s+)", s) # s is your string
于 2012-07-13T11:52:43.310 に答える
0

これを試して。それはあなたが言及した望ましい結果を私に与えました。

StringBuilder testt = new StringBuilder("Jake,HomePC,Microsoft VS2010, Microsoft Office 2010,Microsoft VS2010, Microsoft Office 2010");
Pattern varPattern = Pattern.compile("[a-z0-9],[a-z0-9]", Pattern.CASE_INSENSITIVE);
Matcher varMatcher = varPattern.matcher(testt);
List<String> list = new ArrayList<String>();
int startIndex = 0, endIndex = 0;
boolean found = false;
while (varMatcher.find()) {
endIndex = varMatcher.start()+1;
if (startIndex == 0) {
list.add(testt.substring(startIndex, endIndex));
} else {
startIndex++;
list.add(testt.substring(startIndex, endIndex));
}
startIndex = endIndex;
found = true;
}
if (found) {
if (startIndex == 0) {
list.add(testt.substring(startIndex));
} else {
list.add(testt.substring(startIndex + 1));
}
}
for (String s : list) {
System.out.println(s);
}

コードはJavaであることに注意してください。

于 2012-07-13T13:09:46.603 に答える