2013-04-28 2 views
0

Я пытаюсь разбить строку в следующем формате:Regex разрыв с запятой дает неожиданные результаты

9A ##{Indie; Rock}## 

(Строка приходит из mp3 тега через TagLib)

код является :

 string[] parts = Regex.Split(comment,"##{"); 
     string prefix = parts[0]; 
     Console.WriteLine(parts[1]); 
     string[] parts2 = Regex.Split(parts[1], "}##"); 
     string keywords = parts2[0]; 
     string suffix = parts2[1]; 

Однако в Console.WriteLine, я получаю обратно:

Indie 

В то время как я ожидал:

Indie; Rock}## 

Я предполагаю, что это что-то сегодня с запятой, истекающей линию рано, но я не знаю, почему (или как это исправить).

+1

На самом деле, когда я бегу первые 3 строки кода с 'вар comment = "9A ## {Indie; Rock} ##"; ', я получаю ожидаемый вывод' Indie; Rock} ## '. Голосование закрывается. – spender

+0

меня тоже. попробовал вышеуказанный код 'parts [1]' возвращает ожидаемое значение. Преобразование в VB также возвращает то же ожидаемое значение. – ajakblackgoat

+0

На самом деле - вы правы. Оказывается, проблема заключалась в том, чтобы вытащить комментарий через TagLib. Это было усечение, если там была точка с запятой. – Ben

ответ

2

Попробуйте использовать группы захвата. http://www.regular-expressions.info/named.html

Это регулярное выражение работал для меня

##{(?<first>.*);(?<second>.*)}## 

Кроме того, Expresso может быть очень полезно для регулярных выражений проблем http://www.ultrapico.com/ExpressoDownload.htm

+0

Можете ли вы сделать это, даже если вы не знаете, сколько предметов вам нужно будет захватить? – Ben

+0

Да, вы должны использовать Regex.Match(), а затем перебрать свойство Groups. Вот пример http://stackoverflow.com/questions/5767605/looping-through-regex-matches и довольно приличный учебник http://www.dotnetperls.com/regex-match. – Jras