正则表达式匹配关键字之前的第一次出现

RegEx match first occurrence before keyword

我有以下字符串:

<ul><li><span>some words here.</span></li><li><span>other words here.</span></li><li><span>Code: 55555.</span></li></ul>

我的目标是从字符串中删除这部分,即包含 "code" 关键字的 li 标签集:

<li><span>Code: 55555.</span></li>

我正在尝试编写一个 RegEx 来帮助我匹配和替换我的子字符串。 <li></li> 之间的文本可能会有所不同,但它始终具有关键字 "Code"。这是我目前所拥有的:

<li>(.*)code:(.*?)<\/li>

问题是,它从第一个 <li> 标签匹配,我希望它从 <li> 标签开始匹配,该标签就在我们的关键字 "code".[=16 之前=]

感谢您的帮助!

<li>(?:.(?!</li>))+Code:(?:.*?)</li>

  • 逐字匹配<li>
  • 后跟文字 </li> 不匹配的任意数量的字符(这确保匹配仅从相关的 <li> 开始)
  • 后跟文字 Code:
  • 后跟任意数量的字符(非贪婪),直到匹配文字 </li>

Demo

您可以为此尝试使用正则表达式组,因此您的正则表达式将是这样的:

r'(<\li>(.*)代码:(.*?)){1,}'

此正则表达式将匹配超过 1 次出现的格式为 <\li>(.*)code:(.*?) 的字符串。

我想这可能会对你有所帮助。

(.*)(<li>.*span.*<\/li>)(.*)

Tim Biegeleisen 提供的 RegEx 工作正常。如果你想确保单词 "Code" 存在,只需将 'span' 替换为 'Code',如:

(.*)(<li>.*Code.*<\/li>)(.*)

  • [a-z|A-Z][Cc]模式:[0-9|.]+[a-z|A-Z]
  • 这里关键字 "Code" 在正则表达式中是强制性的