RegEx不包括子组文本包含在父子组中

时间:2010-10-23 02:52:01

标签: regex

为了这个问题,我将包括一个我正在尝试做的基本例子。我一直在寻找一种使用正则表达式的方法,它允许我输入如下:

<a>$4<br>.00</a>

要在一个子组4.00

中匹配此项

我尝试了很多方法,所有方法都围绕着:

<a>\$([0-9]+<br>\.[0-9]+)</a>
or
<a>\$([0-9]+(?:<br>)\.[0-9]+)</a>
            ^-- Excludes <br> from being placed in a match group, but it does not
                exclude <br> from its parent match group, so we still get 4<br>.00

上述两种方法都匹配4<br>.00

我的问题是:是否有其他正则表达式运算符允许我从父子表达式中排除某些子表达式? (匹配4<br>.00但排除{1}}在1个子组中提供<br>

3 个答案:

答案 0 :(得分:1)

是否有任何语言的替换功能?有点像:

s.replaceAll(“&lt;。+&gt;”,“”)

这样就可以用空字符串替换字符串中的所有标记,并留下您想要的内容。

答案 1 :(得分:0)

如果您想使用正则表达式,则无需一步完成。你可以把它分解成几步。例如:使用/<a>(.*?)<\/a>/获取文本并保存到变量。然后替换标签

>>> import re
>>> s="<a>$4<br>.00</a>"
>>> re.sub("<a>(.*?)<\/a>","\\1",s)
'$4<br>.00'
>>> var=re.sub("<a>(.*?)<\/a>","\\1",s)
>>> re.sub("<.*?>","",var)
'$4.00'

答案 2 :(得分:0)

我决定改用lxml。即使是最小的HTML解析需求,lxml也可以解决问题。