查看: 520|回复: 8
打印 上一主题 下一主题

[求助] 问个正则的问题,求大神回答!

[复制链接]
  • TA的每日心情
    慵懒
    4 天前
  • 签到天数: 606 天

    [LV.9]以坛为家II

    8

    主题

    736

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    13070
    跳转到指定楼层
    1
    发表于 2018-10-30 11:51:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    复制代码
    我想要匹配字典中的词条解释,指定我自己的class以便后期排版,通过观察我发现定义词条的一些规律,但是写正则感到很复杂。
    我目前是要打算匹配罗马数字开头的词条解释,它们的筛选条件是这样的:
    1:开头是以<span class="RomanNum"><B>加一个罗马数字来匹配的,这是我的正则式(<BR>)(<span class="RomanNum"><B>[^a-z0-9]+?<\/B>)
    2:然后我要判断如何跟后面的例句分开,我发现有几种可能性,
        1) 结尾碰到换行符,然后紧接着是一个加粗符号,也就是<BR><B>
        2)遇到的第一个冒号,可以作为另一种判定词条结尾的标准
        3)分号+加粗符号也就是;<B>来判定词条解释结束
        4) 但是这里有一个情况,如果单独判断分号+加粗符号的话,会把这一条解释从中间截断,所以它需要满足一个条件,就是;<BR>不能被括在括号里,而且要小心避免像3中的情况,3里面;<BR>没有被括在括号里,但是在它们的前后都有括号存在,如果单独判定说;前面不能有(,<BR>后面不能有)可能把3也pass掉了。
        5)这些条件必须作为or的关系来存在,也就是让电脑去判断词条或者以没被括在括号里的;<BR>结束,或者以遇到的第一个:结束,或者以<BR><B>结束,这几个条件先碰到哪个就匹配哪个,并且不再继续判断后面的条件。

    不知道是否可行,我所提到的这些情况都在我附件中提供的代码里面包括了,请大神支招!

    html code.rar

    2.93 KB, 下载次数: 3, 下载积分: 米 -5 粒

  • TA的每日心情
    奋斗
    2022-6-1 19:02
  • 签到天数: 377 天

    [LV.9]以坛为家II

    27

    主题

    556

    回帖

    15万

    积分

    状元

    喜欢折腾,但能力有限

    Rank: 9Rank: 9Rank: 9

    积分
    150901

    灌水大神章笑傲江湖章管理组专用章

    推荐
    发表于 2018-10-30 20:42:32 | 只看该作者
    本帖最后由 simonfire 于 2018-10-30 21:09 编辑
    preachers 发表于 2018-10-30 19:02
    你的这个式子挺好的,把我比较主要犯难的地方解决了,而且还用了lookahead,方便我后期插入class,赞!
    ...

    如果其他例外的数据也是像was第II条那样的话,后面的断言部分可以加上<EX,写成下面那样就ok了

    ps:解决了就好,括号匹配后面那个;?可以去掉的,前面的.已经包括它了。
    1. (?=((?!\()<B)|<EX)
    复制代码

    评分

    1

    查看全部评分

  • TA的每日心情
    奋斗
    2022-6-1 19:02
  • 签到天数: 377 天

    [LV.9]以坛为家II

    27

    主题

    556

    回帖

    15万

    积分

    状元

    喜欢折腾,但能力有限

    Rank: 9Rank: 9Rank: 9

    积分
    150901

    灌水大神章笑傲江湖章管理组专用章

    推荐
    发表于 2018-10-30 18:13:22 | 只看该作者
    本帖最后由 simonfire 于 2018-10-30 18:49 编辑

    没太看明白你的需求,按着我的理解写了一个,你满足你说的那几条不,\1引用匹配就行(用的emeditor)

    这个还不完全,没考虑括号不在释义末尾的情况
    1. (<span class="RomanNum"><B>\w+</B>((?!(<BR>)|(B>)|(\()).)+(\(.+?\);?)*)(?=(?!\()<B)
    复制代码

    评分

    1

    查看全部评分

  • TA的每日心情
    慵懒
    4 天前
  • 签到天数: 606 天

    [LV.9]以坛为家II

    8

    主题

    736

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    13070
    4
     楼主| 发表于 2018-10-30 11:57:40 | 只看该作者
    我为什么看不到自己发的图片呢?我一点编辑图片又会出来,看帖又没有,郁闷啊~~~
  • TA的每日心情
    慵懒
    4 天前
  • 签到天数: 606 天

    [LV.9]以坛为家II

    8

    主题

    736

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    13070
    5
     楼主| 发表于 2018-10-30 13:31:51 | 只看该作者
    我发不出帖子来,总说我长度超过限制,实际上就几个字两张不大的图而已⋯⋯
  • TA的每日心情
    奋斗
    2022-6-1 19:02
  • 签到天数: 377 天

    [LV.9]以坛为家II

    27

    主题

    556

    回帖

    15万

    积分

    状元

    喜欢折腾,但能力有限

    Rank: 9Rank: 9Rank: 9

    积分
    150901

    灌水大神章笑傲江湖章管理组专用章

    6
    发表于 2018-10-30 14:27:31 | 只看该作者
    preachers 发表于 2018-10-30 13:31
    我发不出帖子来,总说我长度超过限制,实际上就几个字两张不大的图而已⋯⋯
    ...



    帮你补个图,你上传图片是不是上传的base64字符串啊,那样肯定超过字符限制了,还不好好显示


  • TA的每日心情
    开心
    2023-1-18 23:24
  • 签到天数: 211 天

    [LV.7]常住居民III

    427

    主题

    4539

    回帖

    9万

    积分

    超级版主

    Rank: 12Rank: 12Rank: 12

    积分
    92011

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章城管大队长

    7
    发表于 2018-10-30 15:00:51 | 只看该作者
    本帖最后由 kyletruman 于 2018-10-30 15:02 编辑

    建议楼主重新编辑帖子(编辑帖子时勾选右上角的“纯文本”),把代码插入代码编辑器<>,图片一直在缓存转圈,什么都看不见
  • TA的每日心情
    慵懒
    4 天前
  • 签到天数: 606 天

    [LV.9]以坛为家II

    8

    主题

    736

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    13070
    8
     楼主| 发表于 2018-10-30 20:40:57 | 只看该作者
    simonfire 发表于 2018-10-30 14:27
    帮你补个图,你上传图片是不是上传的base64字符串啊,那样肯定超过字符限制了,还不好好显示

    ...

    啊,搞定了!谢谢版主,我发现那个后面没有<B>情况的源码里面有个<EXAMPLEU>,这样在你的式子基础上加上|<E就完美解决了。不知道后面测试还会不会有例外。
    最终的式子在这里!
  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    17

    主题

    393

    回帖

    1万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    14980
    9
    发表于 2018-11-13 11:20:18 | 只看该作者
    试试 jquery 或 python 的 pyquery,会比正则顺畅许多……