我需要创建一个与以下行匹配的正则表达式:
<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>
我特别对以下事实感兴趣:该行具有turnServerResponse
标签以及字符串username="removed"
和password="removed"
。用户名和密码具有不同值的其他行也不应考虑。
因此,不应考虑以下一行,因为username
和password
的值与"removed"
不同
<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>
答案 0 :(得分:1)
有关:
if string.find('turnServerResponse')>0 and \
string.find('username="removed"')>0 and \
string.find('password="removed"')>0:
doSomething()
答案 1 :(得分:-1)
我将按照以下方式进行操作:
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"
的行,它们之间可能有一些字符。
免责声明:
请注意,即使第一个出现在 outside 之外,我的方法也会捕获所有行,这些行在{em> username="removed" password="removed"
之后是<turnServerResponse
turnServerResponse
标签。但是,在您的用例中,这可能是无关紧要的(这种情况是不可能的),因此您必须检查自己是否在使用中可能遇到上述情况。