C#Regex如何提取字符串的第一,第二和最后一部分

时间:2016-06-16 11:12:40

标签: c# regex

我的c#regex是

^(?<productno>\d{6})\s(?<type>\w+)\s(?<body>.+?)((?<colorcode>[A-Z]{2}_[A-Z]{1})?|(?<colorcode>[A-Z]{2})?)$

,示例文本为

123456 TYPLV Black Body BK
123456 SAMP Body Black BK_V
123456 TCVERC Black BK_V
INVALID DATA TCVERC Black BK_V

我期待

productno: 123456; type: TYPLV; colorcode: BK
productno: 123456; type: SAMP; colorcode: BK
productno: 123456; type: TCVERC; colorcode: BK
productno: ; type: ; colorcode: 

注意: - 第一部分仅在数字时才有效,如果不是6位数字则不匹配。

基本上我只需要上面示例中的sno,类型和代码。如何使用c#regex实现这一目标。我的正则表达式有什么问题。

我的正则表达式仅适用于

123456 SAMP Black BK_V

而不是

123456 SAMP BK_V

由于

2 个答案:

答案 0 :(得分:0)

试试这个正则表达式:

^(?<productno>\d{6})\s(?<type>\w+)\s(?<body>.*)(?<colorcode>[A-Z]{2}(?:_[A-Z])?)$

答案 1 :(得分:0)

为什么不使用简单的String.Split

string[] tokens = "123456 SAMP BK_V".Split(new string[]{" "},StringSplitOptions.RemoveEmptyEntries);
string productno = tokens[0];               // first
string type = tokens.ElementAtOrDefault(1); // second if available, otherwise null
string colorcode = tokens.Last();           // last

阅读不是更好吗?您可以添加tokens.Length >= 3 - 检查以确保安全。