我正在尝试解析非常复杂的 csv,它是在不使用逗号列的任何引号的情况下生成的。
我得到的唯一提示是,在字段之前或之后带有空格的逗号包含在字段中。
Jake,HomePC,Microsoft VS2010, Microsoft Office 2010
应该解析为
Jake
HomePC
Microsoft VS2010, Microsoft Office 2010
任何人都可以就如何在列正文中包含“\s”和“\s”提出建议。
如果您的语言支持后向断言,请拆分
(?<!\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);
除以 r"(?!\s+),(?!\s+)"
在python中你可以这样做
import re
re.split(r"(?!\s+),(?!\s+)", s) # s is your string
试试这个。它给了我你提到的预期结果。
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 编写的。