2009-12-22 3 views
0

Привет У меня сложная проблема с регулярным выражением, которую я пробовал и имеет частичное решение, но пока не получил работу. По существу, я должен разобрать документ, который находится в формате структуры, такие, как это:Справка по функции Regex

1. HEY BUDDY 
1.A. Your the best 
1.A.1 And i know 
1.A.2. this because 
1.A.3 it is 
1.A.4. the 
1.A.5. truth i 
1.A.6. tell ya. 
1.B. so anyway 
1.B.1. one two 
1.B.2 three four! 
2. i have 
2.A. many numbers 
2.A.1. hahaha 
2.A.1.A. 3.2 ppl 
2.A.1.B. are in 
2.A.1.C my head. 
2.A.1.D. yes exactly 
2.A.2. 3.21 
2.A.3. if you dont 
2.A.4 trust me 
2.B then 
2.B.1. youre 
2.B.2.soo wrong 
2.C. its not 
3. even funny. 
3.A. but it 
3.B. kind of 
3.C. is a little 
4. bit i 
4.A. believe. 
4.A.1. talk to me 
4.A.2. more about 
4.B. these ppl 
4.B.2. in your head. 

Это мой тестовый документ ... Мне нужно найти каждую из новых «пуль» в этом документе, а затем сохранить текст между ними и делать больше вычислений. Все, что я не понял, - это то, как наглядно идентифицировать разные номера контуров с помощью регулярного выражения. (Я знаю, что это, вероятно, можно было бы сделать другими способами, а затем регулярным выражением, но я участвую в процессе обучения регулярному выражению, и я решил, что так делаю это). Теперь я пришел к следующему:

(\b)(([1-9][0-9]?)(\.))([A-Z])?((\.)([1-9][0-9]?)((\.)([A-Z]))?)*(\.)?(\b) 

Проблема заключается в том, что он не распознает 1., 2., 3. или 4., и он поднимает «3.». из 3.2 и 3.21 в тексте. (И да, у меня будет дубль в тексте, подобном этому). Формат для контура всегда # .AZ. #. AZ. #. AZ ... и цифры никогда не должны быть выше 99.

Спасибо за любые Помогите.

ответ

1
^[\d\w\.]+ [^\n]+$ 

объяснения: «начало строки: любую цифру + символ + точка комбинации, а затем пробел и комбинацию любого характера без разрыва строки: конец строки»

Имейте в виду, что вы будете нужно добавить еще одну косую черту, когда вы пишете это регулярное выражение в своем коде.

The Pattern class documentationчрезвычайно полезный, даже если вы продвинуты с регулярным выражением.

1

Решение Bozho работает только для вашего конкретного примера документа и будет генерировать множество ложных совпадений, если есть строки, которые не начинаются с шаблона, который вы хотите сопоставить. Вот более конкретное решение:

^(\d{1,2}\.([A-Z]\.)?){1,2}\s 

А вот как его использовать:

using System; 
using System.IO; 
using System.Text.RegularExpressions; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (var f = File.OpenText("input.txt")) 
     { 
      while (true) 
      { 
       string line = f.ReadLine(); 
       if (line == null) break; 
       Match match = Regex.Match(line, @"^(\d{1,2}\.([A-Z]\.)?){1,2}\s"); 
       if (match.Success) 
       { 
        Console.WriteLine(match.Value); 
        string result = match.Value.Substring(0, match.Value.Length - 2); 
        string[] array = result.Split('.'); 
        // .. 
       } 
      } 
     } 

    } 
} 
Смежные вопросы