所以我有一个很大的问题......
我得到一个字符串:
function myCallBackCustomFunction(callback)
{
//DO YOUR STUFF FOR api then call your server to store data
yourCustomsaveFunction(callback);
}
function yourCustomsaveFunction(googlevars)
{
$.ajax("your url?myparameters="+googlevars, {
success: function(data) {
//your data save msg if any
},
error: function() {
//your error msg if any
}
我需要把它分成
' X,Y'
2
4
' Y,Z'
我没有尝试过任何接近预期结果的地方......
提前致谢!
答案 0 :(得分:2)
如果您正在寻找快速解决方案,请尝试此操作(简单的循环而不是正则表达式):
private static IEnumerable<string> CsvSplitter(string source) {
if (string.IsNullOrEmpty(source))
yield break; //TODO: you may want to throw exception in case source == null
int lastIndex = 0;
bool inQuot = false;
for (int i = 0; i < source.Length; ++i) {
char c = source[i];
if (inQuot)
inQuot = c != '\'';
else if (c == '\'')
inQuot = true;
else if (c == ',') {
yield return source.Substring(lastIndex, i - lastIndex);
lastIndex = i + 1;
}
}
//TODO: you can well have invalid csv (unterminated quotation):
// if (inQuot)
// throw new FormatException("Incorrect CSV");
yield return source.Substring(lastIndex);
}
样品:
string source = @"'x,y',2,4,'y,z',";
string[] result = CsvSplitter(source).ToArray();
Console.Write(string.Join(Environment.NewLine, result));
输出:
'x,y'
2
4
'y,z'
然而,在一般情况下 google for CSV解析器
答案 1 :(得分:2)
如果你想采用正则表达式,你可以使用
('.*?'|[^,]+)
并浏览捕获组,但我强烈建议您使用CSV解析器。
答案 2 :(得分:1)
如果没有允许嵌套引号,我们可以使用简单的正则表达式'.*?'|[^,]+
检索所需的部分:
var input = "'x,y',2,4,'y,z'";
var parts = Regex
.Matches(input, "'.*?'|[^,]+")
.Cast<Match>()
.Select(m => m.Value)
.ToList();
Console.WriteLine(string.Join(Environment.NewLine, parts));
演示:https://dotnetfiddle.net/qo5aHz
虽然.NET flavor允许为嵌套引号详细说明,但它会相当困难,因此最好使用现成的CSV解析器。例如,TextFieldParser
随.NET提供。