2015-01-23 5 views
0

У меня есть эта строка:Regex.Split игнорирует Empy результаты

IMD+F++:::PS4 SAINTS R IV R?+GA' 

Я хотел бы разделить его на два этапа. Сначала я хотел бы разделить на + кроме экранированных плюсов "+". Во-вторых, я хочу разбить результат на:, за исключением скрытых двоеточий "?:".

Со следующим Regex я могу успешно разделить мою строку:

string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![\?])[\+]+"); 

результата:

[0] IMD 
[1] F 
[2] :::PS4 SAINTS R IV R?+GA' 

Результат неверен. Это должно быть 4 входа в массив. Он удаляет пустые резуллы. Мне нужны пустые результаты, чтобы остаться в массиве. Результат должен быть:

[0] IMD 
[1] F 
[2] 
[3] :::PS4 SAINTS R IV R?+GA' 

Кто-нибудь знает, почему он так себя ведет? Какие-либо предложения?

+0

Вы должны сосредоточиться на одной проблеме одновременно - если вы хотите разделить на двоеточие, я предлагаю вам задать это как отдельный вопрос. (Учитывая, что ваш ожидаемый результат включает двоеточия, по-видимому, вы еще не пытаетесь это сделать.) –

+0

Да, я буду делать один раскол за раз. Основная проблема заключалась в том, чтобы сохранить записи empy. Но она решена сейчас. – jjtilly

ответ

3

Вы явно говорите, что вы хотите разделить на «по крайней мере один плюс» - это то, что [\+]+ средства. Вот почему он обрабатывает ++ как отдельный разделитель. Просто разделить на одного плюс - и обратите внимание, что вам не нужно, чтобы положить, что в набор символов:

string[] data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<!\?)\+"); 

Если вы сделать хотите, чтобы положить его в набор символов, доном «нужно избегать этого - единственная причина избежать этого выше - сказать« это не квантификатор группы, это просто плюс ». Так что это одинаково хорошо:

string[] data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![?])[+]"); 
+0

Спасибо! Эти примеры работали точно так, как я хотел. – jjtilly

2

Просто удалите + после класса символов. Потому что + жадно сопоставляет предыдущий токен один или несколько раз. Таким образом, это регулярное выражение [\+]+ соответствует не только одному плюсу, но и следующим плюсам.

string[] Data = Regex.Split("IMD+F++:::PS4 SAINTS R IV R?+GA'", @"(?<![?])[+]") 
+0

И класс символа должен быть изменен на '[: +]'; он тоже хочет разделить на двоеточия. –

+0

@TimPietzcker, но его ожидаемый результат отличается. –

+0

Хм, ты прав - возможно, он говорил о том, чего он ожидает после первого раскола. @jjtilly должен уточнить. –

 Смежные вопросы

  • Нет связанных вопросов^_^