我有一个字符串
String strValue = "city, image, N'Hello, World , It Rain', picture";
我想转换为String [],我使用了strValue.Split(',')
结果:
[
city,
image,
N'Hello,
World,
It Rain',
picture
]
但是我不想分裂N'Hello,世界,下雨'
我希望结果是:
[
city,
image,
N'Hello, World , It's Rain',
picture
]
谢谢大家。
答案 0 :(得分:6)
假设您的字符串值使用逗号分隔,然后使用空格分隔,则可以使用以下行将其拆分为使用多个字符作为分隔符的数组,如示例所示。
String[] strValues = strValue.Split(new string[] { ", " }, StringSplitOptions.None);
这里是DotNetFiddle
编辑-鉴于需求的突然变化...
如果您不关心结果的顺序,并且想再次提取所有相同格式的句子,('N<sentence>')
我们可以使用类似的方法快速提取值: / p>
String strValue = "city, image, N'Hello, World , It Rain', picture";
// Match the sentences by N'{text}'
var strValues = Regex.Match(strValue, "(?<=N')(.*?)(?=')");
// Remove the sentences from the string
foreach(var matchedVal in strValues.Captures){
var toRepl = String.Format("N'{0}', ", matchedVal.ToString());
strValue = strValue.Replace(toRepl, "");
}
// Split the remainder of the string
List<string> strOtherValues = strValue.Split(new string[] { ", " }, StringSplitOptions.None).ToList();
// Add all sentences to words list
foreach (var matchedVal in strValues.Captures)
{
strOtherValues.Add(matchedVal.ToString());
}
答案 1 :(得分:0)
似乎您的字符串格式已知有4个逗号分隔的字段,在这种情况下,请使用regex知道第3个字段可能带有逗号:
String strValue = "city, image, N'Hello, World , It Rain', picture";
Pattern PATTERN = Pattern.compile("([^,]+), ([^,]+), (.+), ([^,]+)");
Matcher matcher = PATTERN.matcher(strValue);
if (matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
System.out.println(matcher.group(4));
}
答案 2 :(得分:0)
好吧,这真是一团糟;可能也有可怕的表现。但至少似乎可以做您想要的事情(还没有测试很多极端情况)。
问题是,您需要以某种方式区分是在原始字符串的“内部”还是“外部”“转义”部分之间。如果您在“内部”,则应该不进行分隔符的常规拆分。
public static IEnumerable<string> MySpecialSplit(string value, string separator, string escapeStart, string escapeEnd)
{
var result = new List<string>();
var start = value.StartsWith(separator) ? separator.Length : 0;
var inEscape = false;
for (var i = start; i < value.Length - separator.Length; i++)
{
if (inEscape && value.Length > i + escapeEnd.Length && value.Substring(i, escapeEnd.Length).Equals(escapeEnd))
{
inEscape = false;
}
else if (!inEscape && value.Length > i + escapeStart.Length && value.Substring(i, escapeStart.Length).Equals(escapeStart))
{
inEscape = true;
}
if (!inEscape && value.Substring(i, separator.Length).Equals(separator))
{
result.Add(value.Substring(start, i - start));
i += separator.Length;
start = i;
i--;
}
}
if (start < value.Length - separator.Length)
{
var rest = value.Substring(start);
if (rest.EndsWith(separator))
{
rest = rest.Substring(0, rest.Length - separator.Length);
}
result.Add(rest);
}
return result;
}
使用方式:
var splitted = MySpecialSplit("city, image, N'Hello, World , It's Rain', picture", ", ", "N'", "',");
Console.WriteLine(string.Join(Environment.NewLine, splitted));
结果:
city
image
N'Hello, World , It's Rain'
picture
答案 3 :(得分:-3)
尝试一下
Matcher matcher = PATTERN.matcher(strValue);
if (matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
System.out.println(matcher.group(4));
}