2012-01-08 4 views
0

элемент на странице нуждалось содержание, которое я пытаюсь тянуть вот element.content после синтаксического анализа с NokogiriRegEx слова совпадают

["\n  \n  \n  \n   itemId[0]=1234;\n  \n  \n   \n  \n  \n  \n  \n  My Project: First Edition\n  \n  ", "\n  \n  \n  \n   itemId[1]=2345;\n  \n  \n   \n  \n  \n  \n  \n  My Second Edition\n  \n  ", "\n  \n  \n  \n   itemId[2]=1234;\n  \n  \n   \n  \n  \n  \n  \n  Third\n  \n   \n"] 

Я был в состоянии получить RegEx для itemId[0]=1234, который (/itemId.\d+..\d{4}/) но Я полностью зациклен на том, как захватить имена контента. Любой совет? Возможно, я могу просто разобрать Ruby через HTML?

+0

Я смог разобрать элемент по-разному; Я отделяю itemId и Name от одного синтаксического анализа; и я смог получить необходимую информацию. Помогает делать то, что нужно от прав. Спасибо всем ! – ZeTradr

ответ

0

Учитывая строку, как это:

s= "\n  \n  \n  \n   itemId[0]=1234;\n  \n  \n   \n  \n  \n  \n  \n  My Project: First Edition\n  \n  " 

Вы можете сделать это:

m = s.match(/(itemId\[\d+\]=\d+);(.*)/m) 
item = m[1] 
# itemId[0]=1234 
name = m[2].strip 
# My Project: First Edition 

В основном вы вытащите itemId... часть, используя (более или менее) или существующее выражение, захватить остальную часть строка ((.*)) в многострочном режиме (/m, так что . соответствует символу новой строки), а затем отмените оскорбительные пробелы вне регулярного выражения, используя strip. Вам не нужно создавать одно нечитаемое регулярное выражение, которое делает все, что вам нужно, после обработки результата совпадения разрешается, а иногда даже поощряется.

+0

кажется, что item = m [1] возьмет первый (itemId \ [\ d + \] = \ d +), а имя = m [2] возьмет остальную часть строки и остановится там ... mmmm – ZeTradr

+0

@ZeTradr: Поэтому просто примените его к каждому элементу вашего массива. Или я чего-то не хватает? –

+0

@mu_is_too_short: вы правы, говорили слишком рано; Спасибо! – ZeTradr

0

Предлагаю вам использовать split, чтобы найти все непустые строки.

str.split(/\s*\n\s*/) 

должен сделать трюк.

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