2015-09-14 3 views
0

Я написал регулярное выражение, чтобы выбрать первый блок, но он не работает. Просто выберите i2.2.2.0 и когда я хочу добавить еще одну строку, она не имеет никакогоPython regex соответствует многострочному блоку текста

мой вклад:

> 1.1.1.0/24  0.0.0.0     0   32768 i 
* i2.2.2.0/24  2.2.2.2     0 100  0 i 
*>i     123.2.2.106    0 100  0 i 
*>i     123.1.1.106    0 100  0 i 
* i3.3.3.0/24  123.3.3.107    0 100  0 i 
* i     123.3.3.107    0 100  0 i 
* i123.1.1.0/24  2.2.2.2     0 100  0 i 
* i     123.2.2.106    0 100  0 i 
*>     0.0.0.0     0   32768 i 
* i123.2.2.0/24  2.2.2.2     0 100  0 i 
* i     123.2.2.106    0 100  0 i 
*>     0.0.0.0     0   32768 i 
* i123.3.3.0/24  2.2.2.2     0 100  0 i 
*>i     123.2.2.106    0 100  0 i 
*>i     123.1.1.106    0 100  0 i 

мои результаты должны быть:

  1. * i2.2.2.0/24 2.2.2.2 0 100 0 i *>i 123.2.2.106 0 100 0 i *>i 123.1.1.106

  2. i123.3.3.0/24 2.2.2.2 0 100 0 i *>i 123.2.2.106 0 100 0 i *>i 123.1.1.106 результат.

мое регулярное выражение: (i2.2.2.0/24).*(\n123.2.2.106)...

Мне нужно выражение для использования в питона коде. Я много искал, но я не мог найти результат.

Thanks :)

+0

Попробуйте это '^ [*>] + i ([\ d ./] +)? \ S + ([\ d.] +) \ S + (. *)' – luoluo

+0

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

+0

Вы предоставили текущий выход и ожидаемые результаты, но что такое вход? –

ответ

0

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

(\* i(?:123.3.3.0/24|2.2.2.0/24).+\n(?:\*.i .+\n)*) 

, например, соответствует (с глобального модификатора) как 2.2.2.0/24 и 123.3.3.0/24 блок в любом порядке; см. regex101.

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