Строка Между Функцией? - PullRequest
1 голос
/ 24 августа 2009

Есть ли способ получить строку между .. скажем, цитата " Проблема с использованием Indexof и подстроки состоит в том, что он получает первое «и последнее», но не пару. Как

"Привет" "ПОЧЕМУ" "WWWWWEEEEEE"

Получит

Привет "" ПОЧЕМУ "" WWWWWEEEEEE

Я хочу получить массив> Здравствуйте, ПОЧЕМУ, WWWWEEEEEE

Есть ли способ сделать это?

Ответы [ 4 ]

7 голосов
/ 24 августа 2009

Как то так?

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" , это должно дать вам список, содержащий:

  • Hello
  • ПОЧЕМУ
  • 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();
}
2 голосов
/ 24 августа 2009
string s = '"Hello" "WHY ARE" "WWWWWEEEEEE"'
string[] words = s.Split('"');
// words is now ["Hello", " ", "WHY ARE", " ", "WWWWWEEEEEE"]

Если вам не нужны пустые строки, вы можете разделить их на '" "', и в этом случае вы получите ['"Hello', "WHY ARE", 'WWWWWEEEEEE"'].

С другой стороны, использование регулярных выражений может быть лучшим решением для того, что вы хотите. Я не эксперт по C #, поэтому я не могу дать код из головы, но это регулярное выражение, которое вы хотите использовать: "(.*?)"

0 голосов
/ 24 августа 2009

Вы также можете использовать метод 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);
0 голосов
/ 24 августа 2009
string s = '"Hello" "WHY ARE" "WWWWWEEEEEE"
s.replace("\" \"", "!*!"); // custom seperator
s.Replace('"', string.empty);
string[] words = s.Split('!*!');

Должен сделать трюк,

Доброжелательность,

Dan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...