如何减少python正则表达式中的步骤?

时间:2016-08-17 01:15:24

标签: regex python-3.x

这是我的正则表达式

  

(适用[^>] +并[d])/(?一)(?:BR | p)的

这是示例

<r> this is text which I do not want <a> This is what I want!<br>

我只想在&#39;&gt;&#39;之间废弃文字。和&#39;&lt; br或p&#39;

这个正则表达式正是我想要的,但我意识到这需要时间太多。

我在regex调试器上运行它,它花了800多步来检查错误的句子。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

您的([^>]+?[<])/?(?!a)(?:br|p)模式意味着:

  • ([^>]+?[<]) - 在>以外的第一个<
  • 之外的一个或多个(但尽可能少)的字符中捕获到第1组
  • /? - 匹配可选的/符号
  • (?!a)(?:br|p) - 匹配不以br开头的pa(因此,前瞻毫无意义)。

基本上,它只返回</br><br<p之前的文字。你可以使用

>([^<]+)</?(?:br|p)\b

请参阅regex demo(有效匹配的21个步骤,以及针对不匹配的字符串<r> this is text which I do not want <a> This is what I want!br>的9个步骤。)

模式详情

  • > - 文字>
  • ([^<]+) - 捕获与<
  • 以外的一个或多个字符匹配的第1组
  • < - 文字<
  • /? - 可选的(一个或零个)/
  • (?:br|p)\b - brp后跟字边界(在这些值之后必须有非字char)。

Python demo

import re
p = re.compile(r'>([^<]+)</?(?:br|p)\b')
s = "<r> this is text which I do not want <a> This is what I want!<br>"
print(p.findall(s))

答案 1 :(得分:0)

这是更少的步骤:

>([^<]+)<(?:br|p)

https://wiki.postgresql.org/wiki/Disk_Usage