gpt4 book ai didi

python - 正则表达式检查Python中多行中两个其他模式之间是否存在模式

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:09 26 4
gpt4 key购买 nike

我正在尝试检查多行中的其他两个模式之间是否存在某些模式。即在 SIP SDP 中,我想知道以“m=”开头的两行之间是否存在“a=recvonly”、“a=sendonly”或“a=inactive”,或者是否没有第二个“m=”然后一行直到字符串末尾 ($)。例如,在“m=audio”和“m=video”之间,或者如果不存在以“m=”开头的其他行,则直到末尾,即底部的空行。

示例 1

v=0\r$
o=- 1402066778 5 IN IP4 10.1.1.1\r$
c=IN IP4 10.1.1.1\r$
m=audio 2066 RTP/AVP 0 101\r$
a=rtpmap:0 PCMU/8000\r$
a=rtpmap:101 telephone-event/8000\r$
a=ptime:20\r$
a=inactive\r$
m=video 0 RTP/AVP 109 34\r$
a=inactive\r$
a=rtpmap:109 H264/90000\r$
a=fmtp:109 profile-level-id=42e01f\r$
$

这里有一场比赛!

示例 2

v=0\r$
o=- 1402066778 5 IN IP4 10.1.1.1\r$
c=IN IP4 10.1.1.1\r$
m=audio 2066 RTP/AVP 0 101\r$
a=rtpmap:0 PCMU/8000\r$
a=rtpmap:101 telephone-event/8000\r$
a=ptime:20\r$
m=video 0 RTP/AVP 109 34\r$
a=inactive\r$
a=rtpmap:109 H264/90000\r$
a=fmtp:109 profile-level-id=42e01f\r$
$

此处没有匹配项

示例 3

v=0\r$
o=- 1402066778 5 IN IP4 10.1.1.1\r$
c=IN IP4 10.130.93.210\r$
m=audio 2066 RTP/AVP 0 101\r$
a=rtpmap:0 PCMU/8000\r$
a=rtpmap:101 telephone-event/8000\r$
a=ptime:20\r$
a=recvonly\r$
$

这里又有一场比赛

我认为以下应该有效,因为“|”不是贪婪的,但它仍然找到示例 2 中不应该出现的模式,因为它出现在 m=video 下方。

re1way = re.compile(r'm=audio.*?(a=recvonly|a=sendonly|a=inactive).*?[(^m=).*|(^$)]')

请问我的想法哪里有缺陷?

最佳答案

根据您的问题,我不太确定这里的参数到底是什么。但鉴于您的示例并请注意字符串的结尾是可能的端点,让我们假设您想要确定您引用的三个“a=”实例之一是否出现在第一个“m=”和“m=”/单个字符串对象中的字符串结尾(而不是标识单个字符串对象中的多个实例)。

在这种情况下,我可能会建议使用“|”进行以下操作两层解决方案中的特殊字符(这是出于解释目的,但您明白了)。我确信您可以通过一些工作来制作相当复杂的单行搜索,但就可读性而言,我认为这更容易:

a = re.search("m=(.*?)(m=|$)", example, re.DOTALL)
if bool(a) is True:
ares = a.group()
aresb = re.search("a=(recvonly|sendonly|inactive)", ares)
if bool(aresb) is True:
print("Yes, 'a=' substring found! Matching substring: " + aresb.group())
else:
print("No initial 'm=' found!")

我注意到,由于标准正则表达式模块不支持可变长度负向后断言模式,因此尝试使用此类方法创建单行来解析“m=”出现在字符串末尾之前的实例(例如示例 2) 将不起作用。我认为多行解决方案是最好的。

关于python - 正则表达式检查Python中多行中两个其他模式之间是否存在模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24112629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com