我的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
由于
答案 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
- 检查以确保安全。