复杂的正则表达式正则表达式

时间:2013-12-09 00:25:21

标签: c# regex

我有一些文字输入,格式如下:

[ PARENT ] - [选项] - [选项]

例如

  1. BIKE -XT-MM-LX-100-BB
  2. TRICYCLE -MM-XP
  3. MOTORBIKE -X100V ( - 此处不能选择X100V)
  4. 我正在使用正则表达式选项分开。 由于一些例外,分离选项并不像您看到的那么容易。 任何后跟破折号的东西都应该是一个选项,除了以X开头并且长度超过两位数的任何东西,例如示例#3 -X100V不是一个选项。 然后我用这些表达式来分隔这些块:

    // Only separates 2 digit options, but we have more digit options:
    (\A[^-]+)(-\w\w\b)+  
    
    // 2 digits and more option which -X100V fits into also. but not an option:     
    (\A[^-]+)(-\w{2,}\b)+
    
    // which separates any 2 digit and longer followed by dash as an option 
    // unless it is started with X (which rules out my 2 digit -XX options by mistake):
    (\A[^-]+)(-[^\BX]\w{1,}\b)+
    

    现在我只需要再做一步,添加规则只是为了消除以-X开头但长度超过两位数的情况,然后我可以再次包含-XT等示例。

    我很想听听这些建议。

3 个答案:

答案 0 :(得分:0)

我不明白这里需要正则表达式。只需使用String.Split并拆分连字符即可。如果您需要,如果它不是“选项”,您可以重新组合第一个,并且应该成为“父母”的一部分。

类似的东西:

var inputString = /*your input string, e.g. "BIKE-XT-MM-LX-100-BB"*/;
var parts = inputString.Split('-');

var parent = parts.First();
var options = parts.Skip(1).ToList();

//put back any non-"option"s
while(options.Any() && options.First().StartsWith("X") && 
    options.First().Length > 3)
{
    parent = String.Format("{0}-{1}", parent, options.First());
    options.RemoveAt(0);
}

答案 1 :(得分:0)

如果您可以显示全文输入,那将会很有帮助。

根据您向我们展示的内容,将父级与选项分开的正则表达式将是:

\A\w+(?=-)

  1. 在字符串\A的开头处断言位置。您也可以使用^

  2. 匹配单个字符“字符”(字母,数字等)\w+

  3. 在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)+

  4. 断言下面的正则表达式可以匹配,从此位置开始(正向前瞻)(?=-)

  5. 匹配字符“ - ”字面意为-

答案 2 :(得分:0)

使用此模式-(?!X[^-\r\n]{2}) Demo

执行正则表达式拆分