2017-01-19 7 views
0

正規表現を使用して以来、しばらく経っています。正規表現を使用したHTMLの一致URL

以下のコードでは、string_to_matchのようなリンクが満載のWebページがあります。私はstring_to_matchの数字「58」のようなリンクの数字だけを取得したい。私の人生のために私はそれを理解することはできません。代わりに正規表現を使用しての

import re 
string_to_match = '<a href="/ncf/teams/roster?teamId=58">Roster</a>' 
re.findall('<a href="/ncf/teams/roster?teamId=(/d+)">Roster</a>',string_to_match) 
+4

を使用したい場合は、なぜ、なぜ、なぜ人々がしようとして続けるか、[正規表現の構文解析HTML?!?](http://stackoverflow.com/ a/1732454/364696)[HTMLパーサ](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)を使用してください。あなたが期待する属性を持つタグを見つけてそれを取り出し、実際には(URLを解析する)(https://docs.python.org/3/library/urllib.parse.html)、 'GET'パラメータは、正確で、大部分は自己文書化するコードになります。正規表現が速くても、維持不能で、おそらく間違ったコードであっても、改善されません。 – ShadowRanger

+0

[RegExはXHTML内蔵タグ以外のオープンタグと一致する可能性があります](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) –

答えて

1

は、あなたがこのケースでは、我々が使用しますhref属性値やURLの解析を、目的のリンクを検索し、抽出するために(BeautifulSoupパーサーを使用して)解析するHTMLの組み合わせを使用することができます正規表現の例:

import re 
from bs4 import BeautifulSoup 

data = """ 
<body> 
    <a href="/ncf/teams/roster?teamId=58">Roster</a> 
</body> 
""" 

soup = BeautifulSoup(data, "html.parser") 
link = soup.find("a", text="Roster")["href"] 

print(re.search(r"teamId=(\d+)", link).group(1)) 

プリント58

0

BeautifulSoupまたはlxmlを使用することをお勧めします。学習の価値はあります。

...しかし、あなたはまだ正規表現

re.findall('href="[^"]*teamId=(\d+)',string_to_match) 
関連する問題