常用表达。从 <p></p> 标签之间的 txt 中获取数字

Regular expressions. Get numbers from txt between <p></p> tags

我尝试在 Sublime Text 文本编辑器中使用正则表达式获取标签之间的数字(仅),但它不起作用

(?<=<p>).*(?=</p>) 
<p>abcdefg 1234.5 hijklmnop.</p></br>

之间对全文有效
([0-9]*\,?[0-9]*)

适用于数字以及所有文本块和其他标签。

(?<=<p>)([0-9]*\,?[0-9]*) (?=</p>) - Is not works

如何将这两个表达式合二为一?

我需要它来大量更改数字样式

谢谢

你试过这样的东西吗?

(?<=<p>\D*?)\d+(?=\D*?</p>)

即:在回顾中,假设 <p> 后跟 0 个或多个非数字(非贪婪)。匹配任意数量的数字(但至少一个),然后假设(前瞻)可能跟随(非贪婪)的非数字,并且必然是 </p>.

非常确定虽然你想要实现的目标可以更简单地完成,没有这些混乱。

现在回想起来,我想我记得 Sublime 的正则表达式引擎在 lookaheads 中对量词有限制...

使用你想要的模式,你需要用你在第一个模式中使用的通配符匹配(除了它们在这里是非贪婪的)包装数字模式匹配:

(?<=<p>).*?([0-9]*\,?[0-9]*).*(?=</p>)

我会使用这个正则表达式:

[0-9]*,?[0-9]+(?=[^<>]*<\/p>)

demo

  • [0-9]* - 0 位或更多位(允许 ,001 值)
  • ,? - 可选分隔符 ,
  • [0-9]+ - 1 个或多个数字
  • (?=[^<>]*<\/p>) - 前瞻检查我们在 <p> 标签内(前面有 mot 关闭 </p> 标签)。

但是,如果您在 <p> 标签内有标签,则需要使用延迟匹配:

[0-9]*,?[0-9]+(?=(?:(?!<\/?p\b)[\s\S])*<\/p>)

Another demo