2017-10-03 4 views
-1

だから、これは私が抽出する必要がありますリンクです:正規表現の難しさ

http://www.hrmagazine.co.uk/article-details/finance-sector-dominates-working-families-benchmark

そして、これは私が現在

.+\/article-details\/.+\-.+\-.+\-.+\-.+\-.+$ 

問題持っているもの、しかし、それは、任意の番号を抽出されています上記のスペースをハイフンで置き換えた特に6語のタイトルではなく、「/ article-details /」の後の単語とハイフンを使用します。私はこのフォーマット

http://www.hrmagazine.co.uk/article-details/one-two-three-four-five-six 

ウェブサイトのこのタイプのための正しい正規表現は何のようなリンクを受け入れるためにそれを必要とするときにそれは悪い結果

http://www.hrmagazine.co.uk/article-details/finance-sector-dominates-working-families-benchmark-test 

を受け入れるだろうか?ハイフンを含む - 私はScrapy /スパイダーを持っている現在の抽出は、あなたの正規表現のもの.+のそれぞれは、任意の文字の任意の数を一致させることができ、次の

rules = (Rule(LinkExtractor(allow=['.+\/article-details\/.+\-.+\-.+\-.+\-.+\-.+$']), callback='parse_item', follow=True),) 
+0

5つのハイフンを含むリンク参照を抽出するには、{count(tokenize(substring-after(@href、 "article-details /")、 " - "))= 6]/@ hrefを試してください – Andersson

+0

Whereその声明は問題を参照していますか?そして、それは正規表現の形式には見えません... – Leggerless

+0

"XPath"タグであなたの質問をマークしました。これはXPath – Andersson

答えて

0

です。だからあなたの全体的な正規表現はちょうど正確なカウントではなく、最低5つのハイフンを必要としています。ハイフン以外の文字のみを照合する場合は、[^-]+を使用してください。

あなたの正規表現内のそれらのバックスラッシュは何も達成していないことに注意してください。次の文字はエスケープする必要がありません。それらがあったとしても、バックスラッシュを二倍にするか、または生の文字列r'whatever'を使用して、円弧がPythonの文字列リテラル解析ルールではなくreモジュールによって解釈されるようにする必要があります。

+0

だから私は正しい正規表現は何ですか? – Leggerless

0

.[a-z]のように置き換えてください。 .もその単語を無制限に一致する理由である、ハイフンにマッチします:

.+\/article-details\/[a-z]+\-[a-z]+\-[a-z]+\-[a-z]+\-[a-z]+\-[a-z]+$ 

あなたは、数字のようなものを一致させる([a-z0-9]、など)だけでなく、ブラケットにそれらを追加する必要がある場合。