正则表达式。从标签之间的 <p></p> txt 获取号码



我尝试用regexp在Sublime Text文本编辑器中获取标记之间的数字(ONLY),但它不起的作用

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

是在之间工作的全文

([0-9]*,?[0-9]*)

适用于数字、所有文本块和其他标记。

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

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

我需要它来进行大规模的数字样式

Thanx

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

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

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

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

参见演示

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

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

[0-9]*,?[0-9]+(?=(?:(?!</?pb)[sS])*</p>)

另一个演示

你试过这样的东西吗?

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

也就是说:在查找中,假设<p>后面跟着0个或多个非数字(非贪婪)。匹配任意数量的数字(但至少一个),然后假设(前瞻性)后面可能有非数字(非贪婪),并且必须是</p>

我非常确信尽管你想实现的事情可以做得更简单,没有这些混乱。

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

最新更新