2010-10-23 30 views
2

爲了解決這個問題,我將包含我正在嘗試執行的基本示例。我一直在尋找一種方法使用正則表達式這將讓我有一個輸入像這樣: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,但不包括<br>在1個子組中給出4.00

+1

小組匹配總是連續的。您不能排除單個比賽中的部分。 – 2011-02-07 19:04:26

回答

0

我決定切換到使用lxml。即使對於最小的HTML解析需求,lxml也能做到。

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' 
+0

這是我想解決的問題。我還可以將兩個字符串作爲2個子組返回並連接它們,但我需要僅使用1個表達式進行匹配,並將4.00返回爲1個子組(忽略中間的
) 。 – Parazuce 2010-10-23 03:05:38

1

是否有替換函數在任何語言是?沿着線的東西:(「< +>」,「」)

s.replaceAll

因此,這將替換所有的標籤在你的字符串與空字符串,讓你與你想要的東西。