Найти строку в тексте и извлечь - PullRequest
0 голосов
/ 12 сентября 2018

В настоящее время я столкнулся с проблемой. У меня есть список строк:

  1. Pferde> Bandagen und Gamaschen> Glocken und Fesselschutz, Marken> Вальдхаузен, Pferde> Bandagen und Gamaschen
  2. Pferde> Sattelzubehör> Zubehör, Маркен> Waldhausen, Pferde> Sattelzubehör
  3. Pferde> Sattel, Маркен> Wintec
  4. Маркен> Wintec
  5. Reiter> Reithelme und Sicherheit> Reflexartikel, Pferde> Bandagen und Gamaschen> Glocken und Fesselschutz, Marken> Вальдхаузен, Reiter> Reithelme und Sicherheit, Pferde> Бандаген и Gamaschen
  6. Pferde> Trensen und Zubehör

Я просто хочу значение после "Marken>". Однако некоторые строки не имеют "Marken>", и место не всегда одинаково.

Редактировать: вот мой код

// Hersteller Fix
string hersteller = "";
string input = tokens[22];


string pattern = @"((.*Marken\>)|(.*?))(?'target'.+)";

RegexOptions options = RegexOptions.Singleline;

foreach (Match m in Regex.Matches(input, pattern, options))
{
    hersteller = m.Index;
    hersteller = m.Groups["target"];
}

Это вывод:

{Waldhausen,Pferde>Sattelzubehör}

Но мне нужны только "Вальдхаузен", "Винтек" ...

У вас есть идеи?

Ответы [ 5 ]

0 голосов
/ 14 сентября 2018
String str = "Reiter>Reithelme und Sicherheit>Reflexartikel,Pferde>Bandagen und Gamaschen>Glocken und Fesselschutz,Marken>Waldhausen,Reiter>Reithelme und Sicherheit,Pferde>Bandagen und Gamaschen";

                List<String> Splitted = str.Split( ',' ).ToList();
                foreach ( String Split in Splitted )
                {
                    if ( Split.Contains("Marken"))
                    {
                        String value = Split.Split( '>' )[1];
                        Console.WriteLine( value );
                        break;
                    }
                }

результат: Waldhausen

0 голосов
/ 13 сентября 2018

попробуйте ниже логики, если у вас работает

 foreach (string x in lst)
            {
                int position = x.IndexOf("Marken>");
                string text = "";
                if (position > -1)
                {
                    text = x.Substring(position + 7);
                    break;
                }
            }
0 голосов
/ 12 сентября 2018
foreach (var inputLine in inputList)
        {
            if (inputLine.Contains(target))
            {
                // Get everything in the line after the location of the target word
                // (indexOf(target) + target.Length ensures we start at the end of the target word, rather than the beginning
                var result = inputLine.Substring(inputLine.IndexOf(target) + target.Length);

                var indexOfSeparator = result.IndexOf('>');

                if (indexOfSeparator != -1)
                {
                    // Grab everything from the start of the string to the location of the separator
                    result = result.Substring(0, indexOfSeparator);
                }

                Console.WriteLine(result);
            }
        }
0 голосов
/ 12 сентября 2018

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

var input = "Marken>Wintec";
string mark = "Marken>";

string output = null;

var start = input.IndexOf(mark);
if (start >= 0)
{
    var end = input.IndexOf(",", start);
    if (end >= 0)
    {
        output = input.Substring(start + mark.Length, end - start - mark.Length);   
    }
    else
    {
        output = input.Substring(start + mark.Length);  
    }
}
0 голосов
/ 12 сентября 2018

Вы можете использовать регулярное выражение:

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"((.*Marken\>)|(.*?))(?'target'.+)";
        string input = @"Pferde>Bandagen und Gamaschen>Glocken und Fesselschutz,Marken>Waldhausen,Pferde>Bandagen und Gamaschen
Pferde>Sattelzubehör>Zubehör,Marken>Waldhausen,Pferde>Sattelzubehör
Pferde>Sättel,Marken>Wintec
Marken>Wintec
Reiter>Reithelme und Sicherheit>Reflexartikel,Pferde>Bandagen und Gamaschen>Glocken und Fesselschutz,Marken>Waldhausen,Reiter>Reithelme und Sicherheit,Pferde>Bandagen und Gamaschen
Pferde>Trensen und Zubehör";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Groups["target"].Value.Trim(), m.Index);
        }
    }
}
...