Я бы сделал это следующим образом:
import re
txt = '''something
<iq from="Server_FQDN" to="pluto@domain.com/671372bf1e530fde" type="result" id="YmJ6ZlDhemSAbaw3"><turnServerResponse ip="1.1.1.1" port="3478" username="removed" password="removed" guid="f72d4f2f-e3f9-4ae9-b91f-c651280635aa"><turnServer ip="1.1.1.1" port="3478" username="removed" password="removed" guid="f72d4f2f-e3f9-4ae9-b91f-c651280635aa"/></turnServerResponse></iq>
something
<iq from="Server_FQDN" to="pluto@domain.com/671372bf1e530fde" type="result" id="YmJ6ZlDhemSAbaw3"><turnServerResponse ip="1.1.1.1" port="3478" username="aaa" password="bbb" guid="f72d4f2f-e3f9-4ae9-b91f-c651280635aa"><turnServer ip="1.1.1.1" port="3478" username="aaa" password="bbb" guid="f72d4f2f-e3f9-4ae9-b91f-c651280635aa"/></turnServerResponse></iq>
something'''
lines = re.findall(r'^.*?<turnServerResponse.*?username="removed" password="removed".*$',txt,re.M)
print(lines) #list of found lines
Вывод:
['<iq from="Server_FQDN" to="pluto@domain.com/671372bf1e530fde" type="result" id="YmJ6ZlDhemSAbaw3"><turnServerResponse ip="1.1.1.1" port="3478" username="removed" password="removed" guid="f72d4f2f-e3f9-4ae9-b91f-c651280635aa"><turnServer ip="1.1.1.1" port="3478" username="removed" password="removed" guid="f72d4f2f-e3f9-4ae9-b91f-c651280635aa"/></turnServerResponse></iq>']
Объяснение: Третий аргумент re.findall
означает, что ^
и $
означают начало иконец строки соответственно.Шаблон означает, что я ищу строку, содержащую <turnServerResponse
, за которой следует username="removed" password="removed"
, возможно, с некоторыми символами между ними.
Отказ от ответственности: обратите внимание, что мой метод будет перехватывать все строки, которые имеют username="removed" password="removed"
после <turnServerResponse
, даже если первый произойдет вне тега turnServerResponse
.Однако в вашем случае использования это может быть неуместно (такая ситуация невозможна), поэтому вы должны проверить себя, возможна ли описанная ситуация при вашем использовании.