2012-01-03 3 views
0

В работе мы используем глобальную систему распределения для заказов, которая очень древняя, когда мы отменяем бронирование, мы получаем ответ от их веб-службы, чтобы сказать, было ли отменено бронирование.Извлечь текст, дефис и номер из строки

Ответ содержит логическое значение, чтобы сказать, если он будет отменен или нет, и строку с какой-либо другой информацией, такие как ссылки отмены или почему она не может быть отменена и т.д. и т.п.

Если успешно cancellled ссылки отмены завязывается в середине строки в ответ и смотрит что-то вроде этого

"NXT REPLACES 1 REDISPLAY ITINERARY1CXL-13113654 THANK YOU FOR YOUR INTEREST" 

из этой строки Мне нужно извлечь «CXL-13113654» ...

в основном CXL сопровождаемый " - "тогда любой ча racter upto, но не включая ""

Я искал университет google, и все, что я могу найти, похоже, только извлечения чисел, символов или символов никогда не будет смешиваться в таком формате, как у меня.

Может ли кто-нибудь помочь?

Как это можно сделать?

+0

Вы ищете шаблон регулярного выражения или утилита для извлечения строки? http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx – user1231231412

+0

RegEx будет очевидным ответом на это, хотя это также может быть выполнено с использованием менее элегантного синтаксического анализа строк. Найдите смещение к тире, вычитайте 3, найдите следующее пространство и выполните подстроку. Если CXL всегда * * CXL, то вы можете сохранить пару шагов. –

+0

Regex был вариантом, который я смотрел, но я не очень хорошо знаком с Regex, поскольку я пытался его изучить, но я действительно боюсь. Еще один вариант, который я пытался сделать, это написать алгоритм, который найдет CXL, а затем берет каждый символ и ломается, когда я нахожу «», но я не могу получить эту работу еще –

ответ

2

Regex картина:

System.Text.RegularExpressions.Regex.Match(inputString, @"(?<match>CXL\-[^\s]+)").Groups["match"].Value 
+0

. Это работает так, как я ожидал, спасибо! –

1

Предполагая, что это одна строка поиска ... вы хотите Regex, как это ....

(?<Anything>[^CXL[\s]*\-[\s]*[^\s]+) 

Это выглядит для CXL с последующим белого пространства любого количества (0 или более), затем дефис, затем 0 или более пробелов, а затем сопоставить все пробелы без пробелов. Все это будет помещено в группу под названием «Anything». You can test it on this page if you like.

C# для этого было бы тогда ...

// -- in using statements add this 
using System.Text.RegularExpressions; 

// -- in your code add something like this 

var inputString = "NXT REPLACES 1 REDISPLAY ITINERARY1CXL-13113654 THANK YOU FOR YOUR INTEREST"; 
var match = Regex.Match(inputString, @"(?<Anything>CXL[\s]*\-[\s]*[^\s]+) "); 
if(match.success && match.Groups["Anything"].Success) 
{ 
    var anything = match.Groups["Anything"].Value; 
    // -- do something with anything 
} 
+0

Обновлено ... извините, не через код вокруг него и он не показывал некоторые из regex – scottheckel

+0

символов после CXL- может быть любым символом не только числа, это будет работать только для чисел –

+0

Извините исправлено ..... – scottheckel

0
using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    public static void Main() 
    { 
     var input = "NXT REPLACES 1 REDISPLAY ITINERARY1CXL-13113654 THANK YOU FOR YOUR INTEREST"; 
     var match = Regex.Match(input, @"CXL\-(?<number>\d+)\s+"); 
     if (match.Success) 
     { 
      Console.WriteLine(match.Groups["number"]); 
     } 
    } 
} 

печатает:

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