2015-11-19 5 views
1

Я пытаюсь соответствовать номера портов в <span> тегов из HTML страницы:Матч номер порта

<span class="tbBottomLine" style="width:50px;"> 
       8080 
     </span> 
<span class = "tbBottomLine" style = "width: 50px;"> 
      80 
    </ span> 
<span class = "tbBottomLine" style = "width: 50px;"> 
      3124 
    </ span> 
<span class = "tbBottomLine" style = "width: 50px;"> 
      1142 
    </ span> 

Сценарий:

import urllib2 
import re 

h = urllib2.urlopen('http://www.proxy360.cn/Region/Brazil') 

html = h.read() 

parser_port = '<span.*>\s*([0-9]){2,}\s*</span>' 

p = re.compile(parser_port) 

list_port = p.findall(html) 

print list_port 

Но я получаю этот выход:

['8', '8', '0', '0', '0', '8', '8', '0', '0', '8', '8', '8', '8', '8', '8', '8', '8', '0'] 

И это необходимо для соответствия 8080.

+0

И что конечный результат вы ищете? Просто 8080? – LPChip

+0

Мне нужны образцы регулярных выражений, которые ищут все образцы на –

+0

Простите, вы все еще не имеете никакого смысла. Правильно ли я понимаю, что после выполнения регулярного выражения он просто найдет 8080, 80, 3124 и 1142, как в вашем примере? или он также должен содержать больше? – LPChip

ответ

0

Вы повторяете .. ([0-9]){2,} группа, которая перезаписывается с последним значением

Вместо того, чтобы повторить подшаблон внутри группы:

<span[^>]*>\s*([0-9]{2,})\s*</\s*span> 

Код

parser_port = '<span[^>]*>\s*([0-9]{2,})\s*</\s*span>' 
p = re.compile(parser_port) 

list_port = p.findall(html) 
+0

Спасибо, @Mariano –

0

Если вы хотите вытащить порты со страницы.

parser_port = '<span.*>\s*([0-9]{2,})+\s*</span>' 

Вы хотите один или более символов (знак +) с длиной, по меньшей мере, два ({2}. Но до сих пор неясно, что случай использования.