Справка по функциям регулярных выражений - PullRequest
0 голосов
/ 22 декабря 2009

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

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 в тексте. (И да, у меня в тексте будут двойные числа)

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 22 декабря 2009

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

^(\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('.');
                    // ..
                }
            }
        }

    }
}
1 голос
/ 22 декабря 2009
^[\d\w\.]+ [^\n]+$

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...