Не первый раз работаю с регулярными выражениями (правдо на автоите дело было).
Есть строки определенного вида:
titleA var1 r.text(a, b, <NAME>) var11Мне нужно получить значение <ip_addr>, если в предыдуще строке (где titleA)
titleB var2 r.text(a, b, <ip_addr1>) var22
titleA var3 r.text(a, b, <name>) var33
titleB var4 r.text(a, b, <ip_addr2>) var44
нет параметра <NAME>. И я такой думаю, что тут нужно использовать (?: ) и re.findall:
import re string = 'titleA var1 r.text(a, b, <NAME>) var11\ntitleB var2 r.text(a, b, <ip_addr1>) var22\ntitleA var3 r.text(a, b, <name>) var33\ntitleB var4 r.text(a, b, <ip_addr2>) var44' t1 = re.findall('titleA[^(?:r.text)]*r\.text\([^\)]*[^(?:NAME)]*\)[^(?:r.text)]*r\.text\([^\)]*([1-9][0-9]{0,2}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\)',string,re.DOTALL) print t1
И конечно же ничего не работает. Я попытался разобраться и дошел до следующего простого выражения, которое не работает:
import re string = 'titleA var1 r.text(a, b, <NAME>) var11\ntitleB var2 r.text(a, b, <ip_addr1>) var22\ntitleA var3 r.text(a, b, <name>) var33\ntitleB var4 r.text(a, b, <ip_addr2>) var44' t1 = re.findall('titleA[^(?:r\.text)]*r\.text(\([^\)]*\))',string,re.DOTALL) print t1
Ничего не возвращает, хотя я думал вернет массив следующего вида:
'(a, b, <NAME>)'
'(a, b, <name>)'
Прошу помощи! Что я делаю не так?
, но разобрался с вашей помощью.