【问题标题】:Regex to match expression followed by lower case character正则表达式匹配表达式后跟小写字符
【发布时间】:2025-12-01 04:20:02
【问题描述】:

我想匹配一个结束标记,后跟一个 0+ 空格/换行符,然后是一个开始标记,后跟一个小写字母。例子:

  • text</p> <p>blah 匹配 </p> <p>
  • text</i><i>and more text <b>but not this</b> 匹配 </i><i>
  • text</i> <i>And more text 不匹配

我试过这个:</.*?>\s*\n*\s*<.*>(?=[a-z]),但它不适用于第二个示例,因为它会匹配 </i><i> and more text </b>,即使问号应该使它“懒惰”。

【问题讨论】:

  • 为什么不使用 HTML 解析器呢?正则表达式不是尝试和处理 HTML 的工具;它将导致pain and anguish..

标签: python regex calibre


【解决方案1】:

试试:

</[^>]+>\s*<[^/>]+>(?=[a-z])

如果您希望能够匹配空标签,请将“+”更改为“*”

【讨论】:

    【解决方案2】:

    使量词变得惰性只会使正则表达式尝试最短的匹配首先,但如果这不起作用,它会很乐意扩展匹配直到整个正则表达式成功。

    您需要更具体地说明您允许匹配的内容 - 例如,不允许在标签内使用尖括号:

    </[^<>]*>\s*<[^/][^<>]*>(?=[a-z])
    

    (另外,\s 已经包含\n,所以\s*\n*\s* 可以缩短为\s*

    【讨论】: