三碗猪脚 2024-07-12 06:23 采纳率: 0%
浏览 5

关于#正则表达式#的问题:想要匹配一个段落


请教一个正则表达式
想要匹配一个段落,以    <p class=dp>※.    开始,以</p>  结束,
但是该段落不能以<div class=da>    <p class=dp>※.开头,
以下写法匹配不出来,请大侠帮修改一下   ^(?!<div class=da>)<p class=dp>※.(.*?)</p>

img

我现在能匹配如上的结果,但是下面的结果要排除掉

img

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-12 06:23
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    正则表达式是一种强大的文本匹配工具,但是它们在处理HTML这类嵌套结构的标记语言时可能会变得复杂和棘手。HTML的复杂性通常意味着使用正则表达式可能不是最佳选择,因为正则表达式不擅长处理嵌套或递归模式。

    你提供的正则表达式尝试使用否定向前预查 (?!...) 来排除以 <div class=da> 开头的段落,但是这个表达式可能没有正确地实现你的需求。以下是一些可能的改进方法:

    1. 使用更精确的匹配:确保你的正则表达式能够精确匹配段落的开始和结束。例如,你的正则表达式可能需要考虑HTML标签中属性值的引号类型(单引号或双引号)。

    2. 考虑使用非贪婪匹配.*? 是一个非贪婪匹配,它尽可能少地匹配字符。确保这是你想要的行为。

    3. 使用HTML解析器:对于复杂的HTML匹配任务,使用像BeautifulSoup这样的HTML解析库可能更为合适。这些库可以正确处理HTML的嵌套结构。

    如果你仍然希望使用正则表达式,可以尝试以下表达式,但请注意,这可能不会涵盖所有情况,特别是在复杂的HTML文档中:

    (?s)(?<!<div[^>]*class=["']?da["']?[^>]*>)<p[^>]*class=["']?dp["']?[^>]*>.*?※\.(.*?)</p>
    

    这个表达式使用:

    • (?s):使.匹配包括换行符在内的任意字符。
    • (?<!...):负向后预查,确保匹配的文本不是在 <div class=da> 之后。
    • [^>]*:匹配任意数量的非>字符,以处理标签内的属性。
    • .*?:非贪婪地匹配任意字符直到遇到第一个 </p> 标签。

    然而,我必须强调,对于复杂的HTML内容,使用正则表达式可能不是最佳解决方案。如果可能的话,考虑使用HTML解析器来处理你的任务。

    至于参考链接,以下是一些可能有用的资源:

    1. 正则表达式101 - 一个在线工具,可以帮助你测试和学习正则表达式。
    2. MDN Web Docs - 正则表达式指南 - Mozilla开发者网络提供的正则表达式指南。
    3. BeautifulSoup 文档 - BeautifulSoup库的官方文档,用于解析HTML和XML文档。

    希望这些信息对你有所帮助!如果你有其他问题或需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 7月12日
  • 创建了问题 7月12日

悬赏问题

  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询
  • ¥20 我的是道格手机,重置后屏幕右上角出现红色字的未写入tee key 和未写入google key请问怎么去掉啊
  • ¥30 关于R语言运行分区生存模型中的问题!
  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀