在文本中查找字符串并提取

时间:2018-09-12 13:53:42

标签: c# .net string search

目前我正面临一个问题。我有一个字符串列表:

  1. Pferde>班达根与加马申>马肯的Glocken und Fesselschutz,沃尔德豪森,Pferde>班达根与加马申
  2. Pferde>Sattelzubehör>祖贝克,马尔肯> Waldhausen,Pferde>Sattelzubehör
  3. Pferde>Sättel,Marken> Wintec
  4. Marken> Wintec
  5. Reiter> Reithelme und Sicherheit> Reflexartikel,Pferde>班达根和加马申>马肯的Glocken und Fesselschutz> Realder,Waldhausen,Referer> Reithelme和Sicherheit,Pferde>班达根和加马森
  6. Pferde> Trensen和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}

但是我只需要“ Waldhausen”,“ Wintec” ...

您有什么想法吗?

5 个答案:

答案 0 :(得分:0)

您可以使用正则表达式:

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);
        }
    }
}

答案 1 :(得分:0)

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);
            }
        }

答案 2 :(得分:0)

这是不使用正则表达式的一种方法,但实际上您应该先尝试一下,然后再在此处提问

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);  
    }
}

答案 3 :(得分:0)

如果适合您,请尝试以下逻辑

20

答案 4 :(得分:0)

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