2011-01-20 65 views
19

我有一個字符串。我們稱之爲'測試'。 我想測試這個字符串的匹配,但只使用正則表達式的backref。如何測試正則表達式匹配

我可以做這樣的事情:

進口重新

for line in f.readlines(): 
    if '<a href' in line: 
     if re.match('<a href="(.*)">', line) == 'test': 
     print 'matched!' 

? 這當然似乎不起作用,但我會認爲我可能會接近? 基本上問題是我怎麼才能重新返回只有backref進行比較?

+0

我建議[Rubular](http://rubular.com/)開發正則表達式 - 這是一個巨大的節省時間。這裏有另一個問題,我幫助了一個類似模式的人:http://stackoverflow.com/questions/4716787/problem-with-ruby-regular-expression – 2011-01-20 01:37:40

回答

18

re.match只匹配字符串的beginning

def url_match(line, url): 
    match = re.match(r'<a href="(?P<url>[^"]*?)"', line) 
    return match and match.groupdict()['url'] == url: 

用法示例:

>>> url_match('<a href="test">', 'test') 
True 
>>> url_match('<a href="test">', 'te') 
False 
>>> url_match('this is a <a href="test">', 'test') 
False 

如果這個模式能在該行的任何地方發生,使用re.search

def url_search(line, url): 
    match = re.search(r'<a href="(?P<url>[^"]*?)"', line) 
    return match and match.groupdict()['url'] == url: 

用法示例:

>>> url_search('<a href="test">', 'test') 
True 
>>> url_search('<a href="test">', 'te') 
False 
>>> url_search('this is a <a href="test">', 'test') 
True 

N.B:如果你想使用正則表達式解析HTML,纔去任何進一步的閱讀RegEx match open tags except XHTML self-contained tags

+4

+1使用正則表達式解析HTML是非常值得冷靜的法律顧問。 – 2011-01-20 03:19:28