功能之间的字串?

时间:2009-08-24 11:02:23

标签: c# string

有没有办法让字符串...让我们说“引用” 使用Indexof和substring的问题在于它获得第一个“和最后一个”而不是该对。像

  

“你好”“为什么”“WWWWWEEEEEE”

它会得到

  

您好“”为什么“”WWWWWEEEEEE

我想让它到达数组>你好,为什么,WWWWEEEEEE

有没有办法做到这一点?

4 个答案:

答案 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”,那应该会给你一个包含以下内容的列表:

  • 你好
  • 为什么
  • 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);