Извлечь текст, дефис и номер из строки - PullRequest
0 голосов
/ 03 января 2012

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

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

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

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

Из этой строки мне нужно извлечь "CXL-13113654" ...

В основном CXL, за которым следует "- "тогда любой символ, кроме" "

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

Кто-нибудь может помочь?

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

Ответы [ 3 ]

2 голосов
/ 03 января 2012

Шаблон регулярного выражения:

System.Text.RegularExpressions.Regex.Match(inputString, @"(?<match>CXL\-[^\s]+)").Groups["match"].Value
1 голос
/ 03 января 2012

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

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

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

Тогда 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 голосов
/ 03 января 2012
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
...