Регулярное выражение C # .net для соответствия текста, разделенного пробелами и двоеточием - PullRequest
0 голосов
/ 28 мая 2009

У меня есть три предложения следующим образом:

000000-00000 Date First text: something1 
200000-00000 Time Second text: something2
234222-34332 struc Third text: somthing3

Как мне написать регулярное выражение для сопоставления (Дата | Время | Struc) и двоеточия (:), не включая (Дата | Время | Struc)?.

Ответы [ 4 ]

3 голосов
/ 28 мая 2009

Я подозреваю, что это то, что вы ищете. Часть регулярного выражения:

new Regex(@"^\d{6}-\d{5} \w* ([^:]*): ")

А вот короткая, но полная тестовая программа:

using System;
using System.Text.RegularExpressions;

class Test
{   
    static void Main(string[] args)
    {
        Parse("000000-00000 Date First text: something1");
        Parse("200000-00000 Time Second text: something2");
        Parse("234222-34332 struc Third text: somthing3");
    }

    static readonly Regex Pattern = new Regex
        (@"^\d{6}-\d{5} \w* ([^:]*): ");

    static void Parse(string text)
    {
        Console.WriteLine("Input: {0}", text);
        Match match = Pattern.Match(text);
        if (!match.Success)
        {
            Console.WriteLine("No match!");
        }
        else
        {
            Console.WriteLine("Middle bit: {0}", match.Groups[1]);
        }
    }
}

Обратите внимание, что здесь не предполагается, что «Дата», «Время» и «структура» являются единственными возможными значениями после цифр, просто они будут построены из символов слова. Это также предполагает, что вы хотите сопоставить всю линию, а не только среднюю часть. Остальные разделы легко извлечь из других групп, если это будет полезно для вас.

0 голосов
/ 28 мая 2009

Если из вашего примера вы ожидаете, что результат будет:

Первый текст Второй текст Третий текст

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

(?<=(DATE|TIME|STRUC)\s)[^:]*

Я не могу себе представить, что на вашем примере это было бы чрезвычайно полезно - похоже, описательный текст - это после двоеточие, которое подразумевает, что вы действительно хотите, чтобы все до конца строки будет:

(?i:(?<=(DATE|TIME|STRUC)\s).*)

[Проверено с помощью RegexBuddy - поэтому, если я правильно интерпретировал ваш вопрос, это работает]

0 голосов
/ 28 мая 2009

Это:

^\d{6}-\d{5} \S+ ([^:]+)

Будет соответствовать "Первый текст", "Второй текст" и "Третий текст", без явной ссылки на (Date|Time|struc). Матч в группе 1.

0 голосов
/ 28 мая 2009

Следующее выражение будет захватывать то, что вы хотите, в именованную группу value, исключая Date, Time, struc, следующий пробел и двоеточие после значения.

(?:Date|Time|struc) (?<value>[^:]*)

Это выражение будет содержать двоеточие.

(?:Date|Time|struc) (?<value>[^:]*:)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...