Skip to main content
 首页 » 编程设计

python之非贪婪 XML 中的多个匹配项(Python 正则表达式)

2024年10月24日28JeffreyZhao

我知道这个话题被问了很多,但我找不到我的问题的答案:

在所附的图像中有许多不同的缓冲区,我希望只匹配名称中包含“Lut”的缓冲区(注意图像中的字符串中有 2 个匹配项)。我遇到的问题是匹配项还包含我想要的缓冲区之前的缓冲区。

我是正则表达式的新手,仍在努力学习,所以任何解释都将不胜感激。

谢谢! :)

附上绳子是为了让您感到舒适(如果需要):

<?xml version="1.0" encoding="utf-8"?> 
<pimp xmlns:dt="urn:schemas-microsoft-com:datatypes"> 
    <dllPath>C:\ReplayCode\Apps\Pimp</dllPath> 
    <buffers>    
    <buffer name="InputMask"> 
            <width>5120</width> 
            <height>3072</height> 
            <data>UCHAR</data> 
            <channels>1</channels> 
            <type>IMG</type> 
    </buffer> 
    <buffer name="MaskErode"> 
            <width>5120</width> 
            <height>3072</height> 
            <data>UCHAR</data> 
            <channels>1</channels> 
            <type>IMG</type> 
    </buffer> 
    <buffer name="BlablaLutBla"> 
            <width>256</width> 
            <height>256</height> 
            <data>UCHAR</data> 
            <channels>1</channels> 
            <type>IMG</type> 
    </buffer> 
    <buffer name="MaskClose"> 
            <width>5120</width> 
            <height>3072</height> 
            <data>UCHAR</data> 
            <channels>1</channels> 
            <type>IMG</type> 
    </buffer> 
    <buffer name="InputVis"> 
            <width>5120</width> 
            <height>3072</height> 
            <data>UCHAR</data> 
            <channels>3</channels> 
            <type>IMG</type> 
    </buffer>    
        <buffer name="AddMaskEdge"> 
            <width>5120</width> 
            <height>3072</height> 
            <data>UCHAR</data> 
            <channels>1</channels> 
            <type>IMG</type> 
    </buffer> 
    <buffer name="EdgeVis"> 
            <width>5120</width> 
            <height>3072</height> 
            <data>UCHAR</data> 
            <channels>3</channels> 
            <type>IMG</type> 
    </buffer>        
        <buffer name="GrayEdge"> 
            <width>5120</width> 
            <height>3072</height> 
            <data>UCHAR</data> 
            <channels>1</channels> 
            <type>IMG</type> 
    </buffer> 
    <buffer name="EdgeMaskMulThreshold"> 
            <width>5120</width> 
            <height>3072</height> 
            <data>UCHAR</data> 
            <channels>1</channels> 
            <type>IMG</type> 
    </buffer> 
    <buffer name="MaskMulEdge"> 
            <width>5120</width> 
            <height>3072</height> 
            <data>UCHAR</data> 
            <channels>1</channels> 
            <type>IMG</type> 
    </buffer>    
    </buffers>   

我试过的正则表达式是这样的:

<buffer name=".*?Lut.*?">.*?<\/buffer> 

我预计有 2 场比赛:

<buffer name="BlablaLutBla"> 
            <width>256</width> 
            <height>256</height> 
            <data>UCHAR</data> 
            <channels>1</channels> 
            <type>IMG</type> 
    </buffer> 

和

<buffer name="2ndLutBlabla"> 
            <width>256</width> 
            <height>256</height> 
            <data>UCHAR</data> 
            <channels>1</channels> 
            <type>IMG</type> 
    </buffer> 

请您参考如下方法:

您可以使用 BeautifulSoup 来解析您的标签。

import re 
from bs4 import BeautifulSoup 
 
input_xml = ''' some xml ''' 
soup = BeautifulSoup(input_xml, "lxml-xml") 
print soup.find_all('buffer', attrs={"name": re.compile('Lut')}) 

如果你还没有安装这个:

pip install beautifulsoup4 
pip install lxml