2011-01-20 16 views
19

私は文字列を持っています。それを「テスト」と呼んでみましょう。 この文字列の一致をテストしたいのですが、正規表現のバックリファレンスのみを使用します。正規表現の一致をテストする方法

輸入

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

再:

私はこのような何かを行うことができますか? これはもちろん、動作していないようですが、近いかもしれないと思いますか? 基本的に質問は、比較のためにバックリファレンスのみを返すようにするにはどうすればよいですか?

+0

正規表現を開発するには[Rubular](http://rubular.com/)をお勧めします。これは非常に時間を節約します。ここで私は同様のパターンで誰かを助けた別の質問があります:http://stackoverflow.com/questions/4716787/problem-with-ruby-regular-expression –

答えて

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を解析することは、誠実な弁護士に非常に適しています。 –

+0

お返事をありがとうございます。どのようにテキストを置き換えてファイルを書きますか? – jml

+1

私はその記事を読んでも、私が持っている限定されたユースケースに対してこの方法を使うことができます。私は包括的なパーザを構築したくありません。 – jml

関連する問題