C # Получение текста между частичными ограничителями / фразами - PullRequest
0 голосов
/ 28 мая 2018

Попытка выяснить способ получения текста (включительно) между двумя предсказуемыми элементами в строке.

Пример:

Full String = [http:Что-то] Один Два Три [http: AnotherOne] Четыре [http: BlahBlah] sdksaod, cne 9ofew {} @: P {

Идеальный результат:

String1 = [http: Something] One Two Three

String2 = [http: AnotherOne] Четыре

String3 = [http: BlahBlah] sdksaod, cne 9ofew {} @: P {

В настоящее время я могу получить результат, но он довольно грязный и может быть сложнее обновить позже.Есть ли лучший способ сделать это?

Пример текущего кода:

String par = "[http//blah.com] One Two Three [http://wow.com] Four Five 
[http://another.com] Six";
        String[] paramUrls = par.Split(' ');

        List<String> paramPerURL = new List<String>();

        String temp = "";
        Boolean found = false;
        for(int z = 0; z < paramUrls.Length; z++){
            if(paramUrls[z].Contains("[http")){                    
                if(found){
                    paramPerURL.Add(temp);
                }
                found = true;
                temp = paramUrls[z] + " ";
            } else{
                temp += paramUrls[z] + " ";
            } 

            if(z == paramUrls.Length -1){
                paramPerURL.Add(temp);
            }
        }

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

Если я правильно понял, ваша строка состоит из частей, которые начинаются с последовательности [text].Если это так, и вы уверены, что символ [ никогда не появится как часть данных, вы можете сделать что-то вроде этого:

stringParts = Regex.Split(par, @"(?=\[)").Where(s => s != String.Empty).ToArray();

Или вы можете использовать только par.Split('['), нов этом случае начальные [ будут удалены из результирующих частей строки.

0 голосов
/ 28 мая 2018

Альтернативный метод без регулярных выражений с использованием string.Split () .

string pattern = "[http";

string[] output = input.Split(new[] { pattern }, StringSplitOptions.RemoveEmptyEntries)
                       .Select(res => pattern + res).ToArray();

Поскольку Split() удаляет разделитель (и) из создаваемых им строковых элементов,мы рекомбинируем эти результаты, добавляя обратно разделитель, используя метод Linq Enumerable.Select () для генерации нового значения.

0 голосов
/ 28 мая 2018

Вы можете сделать это с помощью регулярных выражений:

string str = "[http:Something] One Two Three [http:AnotherOne] Four [http:BlahBlah] sdksaod,cne 9ofew {}@:P{";
string pattern = @"(\[http:Something\].*)(\[http:AnotherOne\].*)(\[http:BlahBlah\].*)";
Regex regex = new Regex(pattern);
var match = regex.Match(str);
Console.WriteLine("String 1 : " + match.Groups[1]);
Console.WriteLine("String 2 : " + match.Groups[2]);
Console.WriteLine("String 3 : " + match.Groups[3]);
...