【问题标题】:How to use re.compile to search for strings with common areas in the middle如何使用 re.compile 搜索中间有公共区域的字符串
【发布时间】:2012-04-04 23:35:43
【问题描述】:

我从一个杂乱的 HTML 文件中搜索以下行:

    <span id="fooPack1_xpl01_name11">150.00 FTL</span>
    <span id="fooPack1_xpl02_name11">350.00 FTL</span>
    <span id="fooPack1_xpl03_name11">250.00 FTL</span>
    <span id="fooPack1_xpl04_name11">230.00 FTL</span>

我使用 BeautifulSoup 和 re 来搜索和查找字符串:

     tags = soup.find_all('span', id=re.compile(r'[fooPack1_xpl04_name11]\d+'))

但显然该字符串的共同部分在开头和结尾,而中间部分总是在变化。如何重组我的搜索模式,使其搜索“fooPack1_xpl”+(不同的字符串)+“_name11”

谢谢。

// 编辑 //

当我查询以下内容时:

    <span id="FullView1_spl02_Stack_4">03/04/12</span>
    <span id="FullView1_spl03_Stack_4">01/03/11</span>
    <span id="FullView1_spl04_Stack_4">02/25/02</span>
    <span id="FullView1_spl05_Stack_4">07/16/04</span>
    <span id="FullView1_spl01_Stack32">999.00 SPL</span>
    <span id="FullView1_spl02_Stack82">150.00 XPP</span>
    <span id="FullView1_spl03_Stack82">350.00 XPP</span>
    <span id="FullView1_spl04_Stack82">450.00 XPP</span>
    <span id="FullView1_spl05_Stack82">550.00 XPP</span>
    <span id="FullView1_spl06_Stack82">650.00 XPP</span>
    <span id="FullView1_spl07_Stack22">888.00 SPL</span>
    <span id="FullView1_spl202_stckFriendName">Red Car</span>
    <span id="FullView1_spl203_stckFriendName">Green Car</span>
    <span id="FullView1_spl204_stckFriendName">Blue Car</span>

与:

     foo=soup.findAll('span', id=re.compile(r'FullView1_spl\d+_stack82'))

我得到以下结果:

    <span id="FullView1_spl204_stckFriendName">Blue Car</span>
    <span id="FullView1_spl02_Stack82">150.00 XPP</span>
    <span id="FullView1_spl03_Stack82">350.00 XPP</span>
    <span id="FullView1_spl04_Stack82">450.00 XPP</span>
    <span id="FullView1_spl05_Stack82">550.00 XPP</span>
    <span id="FullView1_spl06_Stack82">650.00 XPP</span>

显然,我不需要检测顶部元素。所以这是唯一的问题。

【问题讨论】:

    标签: python regex string beautifulsoup


    【解决方案1】:

    你快到了。你想搜索fooPack1_xpl,然后是数字,然后是_name11,那么如何:

    re.compile(r'fooPack1_xpl\d+_name11')
    

    请注意,我只是将 \d+ 用于您期望数字的位置,以及您正在搜索的文字字符串。

    【讨论】:

    • 您好,我正在尝试首先在 HTML 文件中找到包含这些字符串的行,然后仅提取“230.00 FTL”部分。最初的问题在这里:stackoverflow.com/questions/10019954/… 但是通过更改 re.compile 部分,我似乎没有得到正确的行:(
    • 当你已经问了一个重复的问题时,问这个问题有什么意义?我已经回答了你问的具体问题,即如何匹配'fooPack1_xpl'+digits+'_name11'。关于如何提取的详细信息已在您上一个问题的答案中给出。
    • 对不起。我只是不想让其他话题太忙。同时,我有机会获得有关正则表达式库的更多信息。
    • 其实别理我,我觉得行。我用那种模式得到了我需要的东西。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多