简单的正则表达式用于简单的xml字符串

时间:2016-05-25 20:24:50

标签: python regex xml

我有一个由元素组成的字符串。每个元素都可以包含" pear"或" apple"。我可以使用以下方法获取所有元素:

<td width="200">
    <? 
        $sql = "select * from cust_order where firstname = '$firstname' AND lastname = '$lastname' AND order_status = 'review'";
        $SQLResult = mysql_query("$sql", $DBcon_MySQL);

        while($row = mysql_fetch_array($SQLResult )) {      
                //$result;
                foreach($row as $row ){
                    //$result="";

                    $result = "Warning!";

                }

    ?>

        <p><? echo $result;?></p>   
        <?} ?>      
    </td>

但是,我想获得包含pear的最后一个元素。最简单/最快捷的方法是什么?这是一个好方法:

<td width="200">
    <? 
        $sql = "select * from cust_order where firstname = '$firstname' AND lastname = '$lastname' AND order_status = 'review'";
        $SQLResult = mysql_query("$sql", $DBcon_MySQL);

        while($row = mysql_fetch_array($SQLResult )) {      
                //$result;
                foreach($row as $row ){
                    //$result="";

                    $result = "Warning!";

                }

    ?>

        <p><? echo $result;?></p>   
        <?} ?>      
    </td>

或者我应该使用解析器吗?

2 个答案:

答案 0 :(得分:1)

使用解析器,即BeautifulSoup代替:

import re
from bs4 import BeautifulSoup

s = '<tag>uTSqUYRR8gapple</tag><tag>K9VGTZM3h8</tag><tag>pearTYysnMXMUc</tag><tag>udv5NZQdpzpearz5a4oS85mD</tag>'
soup = BeautifulSoup(s, "html5lib")
tags = soup.find_all(text=re.compile(r'pear'))
print tags
# [u'pearTYysnMXMUc', u'udv5NZQdpzpearz5a4oS85mD']

设置dom并查找文本与正则表达式pear匹配的所有标记(从字面上查找“梨”)。
请参阅a demo on ideone.com

答案 1 :(得分:0)

使用适当的XML库可以使用XPath封装查询。例如:

s = '<root><tag>uTSqUYRR8gapple</tag><tag>K9VGTZM3h8</tag><tag>pearTYysnMXMUc</tag><tag>udv5NZQdpzpearz5a4oS85mD</tag></root>'

import lxml.etree
root = lxml.etree.fromstring(s)
result = root.xpath('//tag[contains(., "pear")][last()]/text()')

...对于给定的输入数据,result将包含['udv5NZQdpzpearz5a4oS85mD']DROP TABLE tab_customerxml; 。在这种情况下,您不需要在自己的代码中搜索最后一项,但可以依赖XPath引擎(在C中实现,作为libxml的一部分)来为您执行此操作。