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

时间:2015-07-01 13:06:35

标签: regex sublimetext

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

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

适用于

之间的全文
([0-9]*\,?[0-9]*)

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

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

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

我需要大量改变数字的方式

感谢名单

3 个答案:

答案 0 :(得分:1)

使用您想要的模式,您需要将数字模式匹配与您在第一个模式中使用的外卡匹配(除非它们非贪婪):

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

答案 1 :(得分:0)

你尝试过这样的事吗?

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

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

我非常确定虽然你想要实现的目标可以更简单,但没有这一切。

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

答案 2 :(得分:0)

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

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

请参阅demo

  • [0-9]* - 0位或更多位数(允许,001值)
  • ,? - 可选分隔符,
  • [0-9]+ - 一位或多位
  • (?=[^<>]*<\/p>) - 前瞻检查我们是否位于<p>标记内(前面有mot </p>标记)。

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

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

Another demo