OriginalGriff
Во-первых, k-это не "слово", а регулярное выражение Match
экземпляр класса, поэтому, чтобы получить содержимое, которому он соответствует, вам нужно использовать k.Value
, нет k
Во - вторых, вы пытаетесь написать список внутри цикла, который его создает, - вы хотите, чтобы это было в конце.
В-третьих, у вас есть StringBuilder, и вы даже не используете его!
Это выглядит так, как будто вы просто гадаете и надеетесь, что все это сработает - и это не та стратегия, которая сработает, совсем нет. Перестаньте гадать и начните думать - планируйте, что вы собираетесь делать, а затем, если вы не знаете, как, начните разбивать это на более мелкие шаги.
Попробовать это:
string text = System.IO.File.ReadAllText(@"Dat is my file location");
Regex pattern1 = new Regex("(?<=ECU_ADDRESS).*?(?=)", RegexOptions.RightToLeft); //The start and stop of my file
MatchCollection allMatches = pattern1.Matches(text);
StringBuilder words = new StringBuilder();
foreach (Match match in allMatches)
{
words.AppendLine(match.Value);
}
Console.Write(words.ToString());
Но... ваше регулярное выражение выглядит неправильно. Он похож на тот, что я дал вам вчера, но взломал мой кто-то, кто не понимает регулярных выражений:
(?<=ID Config:\\s+)\\w+(?=\\s)
Ваша версия не имеет завершающего условия ("(? =\\s)" в моей-это "остановка на первом пробеле", ваша просто пуста, а часть ".*?" говорит "абсолютно ничего не соответствует", потому что "*" означает "ноль или более повторений чего-либо вообще", а "?" после нее говорит "как можно меньше", что всегда будет означать "нет, пожалуйста".
Остановитесь, посмотрите на свои данные и определите, что именно определяет начало и конец текста, который вы хотите захватить. Затем используйте образец, который я дал вам вчера, и копию Expresso, чтобы решить, что вам нужно:
Экспрессо[
^] - это бесплатно, и он проверяет и генерирует регулярные выражения.
Richard Deeming
Вероятно, потому что вы используете var
для переменной цикла вместо Match
как и ОГ.
То MatchCollection
класс реализует только не-универсальный IEnumerable
интерфейс, а не универсальный IEnumerable<Match>
интерфейс. В результате, если вы попросите компилятор "угадать" тип переменной цикла с помощью var
, он будет выбирать Object
- поскольку это вся информация , которой он располагает.
Если вы явно укажете ему, какой тип использовать, он будет использовать этот тип. (Если вы скажете ему использовать неправильный тип, вы получите InvalidCastException
во время выполнения.)