В настоящее время я строка:C# жадный регулярное выражение, включая текст матча
"CL,UP_REMOVE_LINE,#global_session_id,arg_stage=false,arg_project_id=-1,#global_line_id,arg_activity_id=-1,arg_mode=1,arg_line_id=#global_line_id,arg_session_id=-1"
Я попытался:
splitty = Regex.Split(lineText,@"[\,]+\s*(?>arg_){1}?");
и получил:
{string[7]}
[0]: "CL,UP_REMOVE_LINE,#global_session_id"
[1]: "stage=false"
[2]: "project_id=-1,#global_line_id"
[3]: "activity_id=-1"
[4]: "mode=1"
[5]: "line_id=#global_line_id"
[6]: "session_id=-1"
Я расщепление по крайней мере один запятая, за которой следует произвольное белое пространство, за которым следует разделитель «arg_», но есть ли способ сохранить «arg_» часть неповрежденной, то есть указывает [1-6]?
Perfect, спасибо. Поэтому мое жадное решение не будет работать, потому что оно потребляет то, что соответствует. Я был в противоположном предположении, что запись «Небезопасная запись» (или «жадное») подвыражение с https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx, где [13579] (?> A + B +) дает «1ABB», «3ABB» и «5AB» в «1ABB 3ABBC 5AB 5AC». Можете ли вы объяснить в этом случае, почему жадное решение, похоже, делает противоположное нашему нынешнему предположению? – Rice
Атомные группы только «отключают» возврат в подвыражение, они по-прежнему соответствуют и потребляют текст, в то время как начертания не потребляют символы, они проверяют наличие или отсутствие какого-либо текста до или после текущей позиции * без * перемещения индекса , См. [* Освоение Lookahead и Lookbehind *] (http://www.rexegg.com/regex-lookarounds.html): * Это означает, что в конце просмотра или lookbehind механизм регулярных выражений не перемещался по строка. Вы можете связать еще три раза после первого, и механизм регулярных выражений по-прежнему не будет двигаться. * –