我有一些文字输入,格式如下:
[ PARENT ] - [选项] - [选项]
例如
我正在使用正则表达式将选项与父分开。 由于一些例外,分离选项并不像您看到的那么容易。 任何后跟破折号的东西都应该是一个选项,除了以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等示例。
我很想听听这些建议。
答案 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+(?=-)
在字符串\A
的开头处断言位置。您也可以使用^
匹配单个字符“字符”(字母,数字等)\w+
在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)+
断言下面的正则表达式可以匹配,从此位置开始(正向前瞻)(?=-)
匹配字符“ - ”字面意为-
答案 2 :(得分:0)
使用此模式-(?!X[^-\r\n]{2})
Demo