2015-11-26 1 views
0

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

<tr> 
<td > <a ><img /></a> 
</td> 
<td > <a ><span >RootData</span></a> 
</td> 
<td > Data1.1 
</td> 
<td > <a ><img /></a> 
</td> 
<td > <a ><span >Data1.2</span></a> 
</td> 
<td > &#160; 
</td></tr> 
<tr> 
<td > Data2.1 
</td> 
<td > <a ><img /></a> 
</td> 
<td > <a ><span >Data2.2</span></a> 
</td> 
<td > &#160; 
</td></tr> 
... 

Во-первых, есть корень, содержащийся внутри первой «тр» , Все еще внутри этого, есть некоторые datq (Data1.1 и Data1.2) для извлечения. Затем приходит конечное число блоков «tr», каждый из которых содержит данные для извлечения. Я хотел бы спички, чтобы быть похожим на это:

  • матч 1: 'RootData' 'Data1.1' 'Data1.2'
  • матч 2: '' RootData Data2.1 '«Data2' 0,2'
  • и т.д.

до сих пор я вижу, что делать с 2 регулярными выражениями и 2 петли (как 1 ищет корень, а другие, чтобы найти все из этого ДАННЫХ корня), но я хотел бы он должен находиться в одном регулярном выражении.

Если некоторые из вас уже сталкивались с этим и может помочь, это было бы красиво :)

Спасибо заранее.

+0

Нельзя делать только регулярное выражение, так как вам нужно два матча, которые начинаются с того же места. –

+0

Это возможно только в том случае, если вы используете механизм регулярных выражений, такой как тот, который указан в языках .net или в модуле regex на python. Во всяком случае, использование регулярного выражения для извлечения данных из xml/html не является хорошим способом. Используйте анализатор для извлечения данных, а затем создайте структуру данных (массив, список, объект ...), в которой вы нуждаетесь. –

ответ

0

Если вы правильно поняли, вы хотите, чтобы одно регулярное выражение обеспечивало более одного соответствия для одного и того же ввода. Регулярные выражения не работают таким образом и, вероятно, просто не являются правильным инструментом для проблемы, которую вы пытаетесь решить.