我正在开发与航班相关的API,因此我需要拆分承运人代码和所接收代码的航班号。例如:
UA775 -> UA and 775
这种情况是微不足道的。但是有多种类型的IATA和ICAO代码,我确定的模式是:
letter letter letter {digit}+
letter digit {digit}+
digit letter {digit}+
因此,三个字母然后是一堆数字,一个字母和一个数字,然后是一堆数字或一个数字,然后是一个字母,然后是一堆数字。在最后两种情况下,它应该像这样工作:
X3567 -> X3 and 567
5U9997 -> 5U and 9997
在Regex匹配的帮助下,有没有办法在c#中做到这一点?当前这是我的代码,缺少最后两种情况:
// e.g:
carrierAndFlightNumber = "X3567";
Regex regex = new Regex(@"([a-zA-Z]+)(\d+)");
Match result = regex.Match(carrierAndFlightNumber);
string carrier = result.Groups[1].Value;
string flightNumber = result.Groups[2].Value;
谢谢。
答案 0 :(得分:2)
您可以使用
@"^([A-Za-z]{3}|[A-Za-z][0-9]|[0-9][A-Za-z])([0-9]+)$"
请参见regex demo
详细信息
^
-字符串的开头([A-Za-z]{3}|[A-Za-z][0-9]|[0-9][A-Za-z])
-第1组:
[A-Za-z]{3}
-3个字母|
-或[A-Za-z][0-9]
-一个字母和一个数字|
-或[0-9][A-Za-z]
-一个数字和一个字母([0-9]+)
-第2组:1个以上数字$
-字符串的结尾。