在工作中我们使用全球分销系统进行预订非常古老,当我们取消预订时,我们会从他们的网络服务获得回复,说明预订是否已成功取消。
响应包含一个bool,表示它是否被取消,以及带有任何其他信息的字符串,例如取消引用或无法取消的原因等等。
如果成功取消,则取消参考被绑定在响应中的字符串中间,看起来像这样
"NXT REPLACES 1 REDISPLAY ITINERARY1CXL-13113654 THANK YOU FOR YOUR INTEREST"
从这个字符串我需要提取“CXL-13113654”......
基本上CXL后跟“ - ”然后是任何字符,但不包括“”
我搜索了谷歌大学,我能找到的所有东西似乎只是提取数字,字符或符号,而不是像我这样的固定格式。
有人可以帮忙吗?
如何做到这一点?
答案 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