从字符串中提取文本,连字符和数字

时间:2012-01-03 14:07:45

标签: c# string-matching

在工作中我们使用全球分销系统进行预订非常古老,当我们取消预订时,我们会从他们的网络服务获得回复,说明预订是否已成功取消。

响应包含一个bool,表示它是否被取消,以及带有任何其他信息的字符串,例如取消引用或无法取消的原因等等。

如果成功取消,则取消参考被绑定在响应中的字符串中间,看起来像这样

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

从这个字符串我需要提取“CXL-13113654”......

基本上CXL后跟“ - ”然后是任何字符,但不包括“”

我搜索了谷歌大学,我能找到的所有东西似乎只是提取数字,字符或符号,而不是像我这样的固定格式。

有人可以帮忙吗?

如何做到这一点?

3 个答案:

答案 0 :(得分:2)

正则表达式:

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

答案 1 :(得分:1)

假设它是单行搜索...你会想要像这样的正则表达式....

(?<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
}

答案 2 :(得分: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