有没有办法让字符串...让我们说“引用” 使用Indexof和substring的问题在于它获得第一个“和最后一个”而不是该对。像
“你好”“为什么”“WWWWWEEEEEE”
它会得到
您好“”为什么“”WWWWWEEEEEE
我想让它到达数组>你好,为什么,WWWWEEEEEE
有没有办法做到这一点?
答案 0 :(得分:7)
这样的东西?
StringCollection resultList = new StringCollection();
try
{
Regex regexObj = new Regex("\"([^\"]+)\"");
Match matchResult = regexObj.Match(subjectString);
while (matchResult.Success)
{
resultList.Add(matchResult.Groups[1].Value);
matchResult = matchResult.NextMatch();
}
}
catch (ArgumentException ex)
{
// Syntax error in the regular expression
}
如果subjectString
“你好”“为什么”“WWWWWEEEEEE”,那应该会给你一个包含以下内容的列表:
使用静态Regex
类的更紧凑的示例,只是将匹配写入控制台而不是添加到集合中:
var subject = "\"Hello\" \"WHY ARE\" \"WWWWWEEEEEE\"";
var match = Regex.Match(subject, "\"([^\"]+)\"");
while (match.Success)
{
Console.WriteLine(match.Groups[1].Value);
match = match.NextMatch();
}
答案 1 :(得分:2)
string s = '"Hello" "WHY ARE" "WWWWWEEEEEE"'
string[] words = s.Split('"');
// words is now ["Hello", " ", "WHY ARE", " ", "WWWWWEEEEEE"]
如果您不想要空字符串,可以按'" "'
分割,在这种情况下,您将获得['"Hello', "WHY ARE", 'WWWWWEEEEEE"']
。
另一方面,使用正则表达式可能是您想要的最佳解决方案。我不是C#专家,所以我无法从头脑中提供代码,但这是你想要使用的正则表达式:"(.*?)"
答案 2 :(得分:0)
string s = '"Hello" "WHY ARE" "WWWWWEEEEEE"
s.replace("\" \"", "!*!"); // custom seperator
s.Replace('"', string.empty);
string[] words = s.Split('!*!');
应该做的伎俩,
善,
丹
答案 3 :(得分:0)
您还可以使用String.IndexOf(char value, int startIndex)方法,该方法的参数表示从中开始扫描的起始索引。
int start = 0;
do
{
int i1 = s.IndexOf('=', start);
if (i1 < 0) break;
int i2 = s.IndexOf('=', i1 + 1);
if (i2 < 0) break;
yield return s.Substring(i1, i2 - i1);
start = i2 + 1;
}
while (start < s.Length);