我正在尝试做一个python正则表达式,它查找格式化为这样的行([edit:]没有新行;原始的都在一行上):
<MediaLine Label="main-video" xmlns="ms-rtcp-metrics">
<OtherTags...></OtherTags>
</MediaLine>
我希望为这个XML元素的主体创建一个捕获组(因此OtherTags...
),以便以后处理。
现在问题出在第一行,其中Label="main-video"
,我不想捕获Label="main-audio"
我最初的解决方案是:
m = re.search(r'<MediaLine(.*?)</MediaLine>', line)
这是可行的,因为它过滤掉了所有其他非MediaLine
元素,但不考虑视频和音频。因此,在它的基础上,我尝试简单地添加
m = re.search(r'<MediaLine Label(.*?)</MediaLine>', line)
但这不会产生一个单一的匹配,更不用说具体到足以过滤音频/视频了。我的问题似乎归结为line
和Label
之间的空间。我能想到的两种尝试都失败了:
m = re.search(r'<MediaLine L(.*?)</MediaLine>', line)
m = re.search(r'<MediaLine\sL(.*?)</MediaLine>', line)
但是,以下操作无法区分音频/视频:
m = re.search(r'<MediaLine\s(.*?)</MediaLine>', line)
为什么“L”是失败的关键?我哪里出错了?谢谢你的帮助。你知道吗
我的目标是这样一个表达:
m = re.search("<MediaLine Label=\"main-video\"(?:.*?)>(?P<payload>.*?)</MediaLine>", line)
result = m.group('payload')
默认情况下,} 标志(又称
.
与换行符不匹配,因此初始解决方案也不起作用。要使.
与换行符匹配,需要使用^{re.S
):注意,在第一个组中还有一个额外的
?
,这样它就不贪婪了。你知道吗另一条评论指出,解析XML最好的方法是XML解析器。但是,如果您的特定XML在标记和属性方面足够严格,那么正则表达式就可以完成这项工作。只会更混乱。你知道吗
相关问题 更多 >
编程相关推荐