LINUX.ORG.RU

Python, регулярные выражения

 


0

4

Привет, у меня есть следующий патерн для строк:

AAAAA<td>00-01-23-3f-8f-dd</td>AAAAA

AAAAA

AAAAA<td><!--#mac-->00-01-23-3f-8f-dd</td>AAAAA

мне необходимо выбрать из них «00-01-23-3f-8f-dd». Понимаю что должно быть что то вроде,

data = re.findall(r'(<td>(.*-->)?(.*)<\/td>)', my_strings)
Т.е. нужно выбирать все что между <td> и </td>, но за <td> так же может следовать ".*-->".

не не могу до конца доделать. Буду рад если подскажите решение.


выбрать из них «00-01-23-3f-8f-dd»

нужно выбирать все что между <td> и </td>

Это таки разные вещи. Если действительно нужно только первое условие, то findall(r'[0-9a-z-]{17}', my_string) будет достаточно.

micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

Вы правы, извиняюсь за неточность. Необходимо выбирать все что между <td> и </td>, игнорируя <!--.*--> если таковое имеется.

hama
() автор топика
Ответ на: комментарий от hama

А обязательно в одно регулярное выражение? Если нет, то можно так:

data_tmp = re.findall(r'<td>(.+)<\/td>', string)
data = re.sub(r'(.*-->)','',data_temp[0])

Gargamel
()

Только мудаки парсят хтмл регулярными выражениями. Используй lxml.

anonymous
()
Ответ на: комментарий от Gargamel

А может ТС просто практикуется в регулярках?

Отлично, значит будет знать, где не надо их использовать. Если умный - загуглит почему.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.