吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 674|回复: 9
收起左侧

[求助] 正则表达式求指教

  [复制链接]
heiyahua 发表于 2023-3-23 19:48
本帖最后由 heiyahua 于 2023-3-24 10:28 编辑

                              <div class="question-type-item" data-dynamic-key="2e77701f-3ea4-45c2-8a51-58458894b0fc" data-current="exam/exam/question/types/answer/choise"><div class="choise preview-content">
    <div data-region="content" data-current="exam/exam/question/types/answer/choise:content">
    <div class="question">
        <span><a class="normal" name="question-2e77701f-3ea4-45c2-8a51-58458894b0fc">1、</a></span>
        查看Linux系统的磁盘列表,并以K或G字节为单位显示磁盘容量的指令是:
    </div>

</div>
    <div class="options" data-region="options" data-current="exam/exam/question/types/answer/choise:options">
<div class="answer">
    <div class="preview-list"><dl>
        <dd id="D86094item-0">
                <div class="radio m-right">
                    <input type="radio" name="value-2e77701f-3ea4-45c2-8a51-58458894b0fc" id="D86094radio-0" value="0">
                    <label for="D86094radio-0"></label>
                </div>
            <label for="D86094answer-item-0">
                <span class="pull-left option-num">A.</span>
                <div class="answer-options m-left">df -l</div>
            </label>
        </dd>

        <dd id="D86094item-1">
                <div class="radio m-right">
                    <input type="radio" name="value-2e77701f-3ea4-45c2-8a51-58458894b0fc" id="D86094radio-1" value="1">
                    <label for="D86094radio-1"></label>
                </div>
            <label for="D86094answer-item-1">
                <span class="pull-left option-num">B.</span>
                <div class="answer-options m-left">du -s</div>
            </label>
        </dd>

        <dd id="D86094item-2">
                <div class="radio m-right">
                    <input checked="checked" type="radio" name="value-2e77701f-3ea4-45c2-8a51-58458894b0fc" id="D86094radio-2" value="2">
                    <label for="D86094radio-2"></label>
                </div>
            <label for="D86094answer-item-2">
                <span class="pull-left option-num">C.</span>
                <div class="answer-options m-left">df -i</div>
            </label>
        </dd>

        <dd id="D86094item-3">
                <div class="radio m-right">
                    <input type="radio" name="value-2e77701f-3ea4-45c2-8a51-58458894b0fc" id="D86094radio-3" value="3">
                    <label for="D86094radio-3"></label>
                </div>
            <label for="D86094answer-item-3">
                <span class="pull-left option-num">D.</span>
                <div class="answer-options m-left">df -h</div>
            </label>
        </dd>
    </dl></div>
</div>
</div>
</div>

</div>
                        <div data-dynamic-key="correct-6f719e0e-74fe-44d8-a383-1922d04dc1a0" data-current="exam/exam/answer-paper/waiting-check-correct">    <div data-region="main" data-current="exam/exam/answer-paper/waiting-check-correct:main">    <div class="bottom-favorite">
        <div class="item ">
            <i class="iconfont icon-mark"></i>
            <span><a id="D86095waiting-check-6f719e0e-74fe-44d8-a383-1922d04dc1a0">待检查</a></span>
        </div>
    </div>
</div>
</div>
                            <div class="question-type-item" data-dynamic-key="6f719e0e-74fe-44d8-a383-1922d04dc1a0" data-current="exam/exam/question/types/answer/choise"><div class="choise preview-content">
    <div data-region="content" data-current="exam/exam/question/types/answer/choise:content">
    <div class="question">
        <span><a class="normal" name="question-6f719e0e-74fe-44d8-a383-1922d04dc1a0">2、</a></span>
        包含MAC地址/UUID/WWN号刀片的服务器配置定制化策略可以
    </div>

</div>
    <div class="options" data-region="options" data-current="exam/exam/question/types/answer/choise:options">
<div class="answer">
    <div class="preview-list"><dl>
        <dd id="D86097item-0">
                <div class="radio m-right">
                    <input checked="checked" type="radio" name="value-6f719e0e-74fe-44d8-a383-1922d04dc1a0" id="D86097radio-0" value="0">
                    <label for="D86097radio-0"></label>
                </div>
            <label for="D86097answer-item-0">
                <span class="pull-left option-num">A.</span>
                <div class="answer-options m-left">绑定两台服务器做主备服务器</div>
            </label>
        </dd>

        <dd id="D86097item-1">
                <div class="radio m-right">
                    <input type="radio" name="value-6f719e0e-74fe-44d8-a383-1922d04dc1a0" id="D86097radio-1" value="1">
                    <label for="D86097radio-1"></label>
                </div>
            <label for="D86097answer-item-1">
                <span class="pull-left option-num">B.</span>
                <div class="answer-options m-left">绑定一台服务器</div>
            </label>
        </dd>

        <dd id="D86097item-2">
                <div class="radio m-right">
                    <input type="radio" name="value-6f719e0e-74fe-44d8-a383-1922d04dc1a0" id="D86097radio-2" value="2">
                    <label for="D86097radio-2"></label>
                </div>
            <label for="D86097answer-item-2">
                <span class="pull-left option-num">C.</span>
                <div class="answer-options m-left">多台服务器计算节点</div>
            </label>
        </dd>
    </dl></div>
</div>
</div>
</div>

</div>
                        <div data-dynamic-key="correct-9bd5c818-fdf0-4bd6-9d51-2614a29f119f" data-current="exam/exam/answer-paper/waiting-check-correct">    <div data-region="main" data-current="exam/exam/answer-paper/waiting-check-correct:main">    <div class="bottom-favorite">
        <div class="item ">
            <i class="iconfont icon-mark"></i>
            <span><a id="D86098waiting-check-9bd5c818-fdf0-4bd6-9d51-2614a29f119f">待检查</a></span>
        </div>
    </div>
</div></div>  


上边的是源码,选择题第一题有ABCD四个选项,第二题有ABC三个选项,其余题目可能会有ABCDEF五个选项,我想把题目和选项都匹配出来,请教正则表达式需要如何修改?之前使用(?:和)?仍然没有效果
partten_timu = f'<span><a class="normal" name="{list_bianma[j]}">({list_xuhao[j]})、</a></span>\s        (.*?)\s    </div>\s\s</div>\s    <div.+?<span class="pull-left option-num">(A).</span>\s' \
                   f'                <div class="answer-options m-left">(.*?)</div.+?                <span class="pull-left option-num">(B).</span>\s                <div class="answer-options m-left">(.*?)</div.+?' \
                   f'                <span class="pull-left option-num">(C).</span>\s                <div class="answer-options m-left">(.*?)</div.+?' \
                   f'                <span class="pull-left option-num">(D).</span>\s                <div class="answer-options m-left">(.*?)</div.+?' \
                   f'                <span class="pull-left option-num">(E).</span>\s                <div class="answer-options m-left">(.*?)</div.+?' \
                   f'                <span class="pull-left option-num">(F).</span>\s                <div class="answer-options m-left">(.*?)</div'

正则表达式需要把选择题的ABCD选项匹配出来,但是有个别题目会有EF选项。上边的正则表达式去掉最后两行后可以运行但是会缺少部分选项,加上最后两行之后又无法匹配全部题目,求教应该怎么修改?

免费评分

参与人数 1吾爱币 +1 收起 理由
lgc81034 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

han5562877 发表于 2023-3-23 22:47
本帖最后由 han5562877 于 2023-3-23 22:52 编辑

使用正则表达式的可选分组,应该改为这样

partten_timu = f'<span><a class="normal" name="{list_bianma[j]}">({list_xuhao[j]})、</a></span>\s        (.*?)\s    </div>\s\s</div>\s    <div.+?<span class="pull-left option-num">(A).</span>\s' \
               f'                <div class="answer-options m-left">(.*?)</div.+?                <span class="pull-left option-num">(B).</span>\s                <div class="answer-options m-left">(.*?)</div.+?' \
               f'                <span class="pull-left option-num">(C).</span>\s                <div class="answer-options m-left">(.*?)</div.+?' \
               f'                <span class="pull-left option-num">(D).</span>\s                <div class="answer-options m-left">(.*?)</div.+?' \
               f'(?:             <span class="pull-left option-num">(E).</span>\s                <div class="answer-options m-left">(.*?)</div.+?)?' \
               f'(?:             <span class="pull-left option-num">(F).</span>\s                <div class="answer-options m-left">(.*?)</div)?'

分组前面加上了(?:和)?用来变成可选

头像被屏蔽
tl;dr 发表于 2023-3-24 07:09
jetty1986 发表于 2023-3-24 07:54
fengrui99 发表于 2023-3-24 08:24
学习一下
小屎球 发表于 2023-3-24 08:37
如果是爬虫建议用xpath,如果是模板渲染建议用for循环
zdnyp 发表于 2023-3-24 09:33
你能把问题提好不你甚至不贴源代码
c13950143096 发表于 2023-3-24 09:36
r'<div class="answer-options m-left">\s+(.*?)\s+</div>'
该正则表达式主要作用是匹配包含选项(abcdef)的 <div> 标签,并且通过捕获组 (.*?) 来获取选项文本。其中 \s+ 表示匹配一个或多个空白字符, (.*?) 表示匹配任意字符(包括换行符),非贪婪模式,直到遇到下一个表达式。使用该正则表达式可以方便地获取题目选项。
Ta'ta 发表于 2023-3-24 09:54
有正则表达式测试的软件,自己慢慢试一下用哪个表达式,好久没用我都忘记了
bobo2017365 发表于 2023-3-24 10:11
那就分几步走呗,第一步提取所有答案,分别存放到字符串,第二步拼接这些字符串
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-11 12:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表