1

ここでいくつかの投稿を読みましたが、私の問題を理解するのに役立ちませんでした:

特定の文字列「Profile Pictures」を除外して場所を一致させようとしている以下の正規表現を読むことができます。 :

re.compile(r"(?!Profile Pictures)</strong></a><div class=\"photoTextSubtitle fsm fwn fcg\">(\d+) photos</div>")

一致した数字 (\d+) が返されますが、「プロフィール写真」はその 1 つとしてカウントされます。私はさまざまな方法を試しましたが、どれもうまくいきません.しかし、私はまだ否定的な先読みがそれを解決する方法だと感じています. 何か案は?ありがとうございました!

4

1 に答える 1

1

Python 正規表現のドキュメントによると、(?!...または否定的な先読みアサーションを使用しています

... が次に一致しない場合に一致します。これは否定先読みアサーションです。たとえば、Isaac (?!Asimov) は、後に「Asimov」がない場合にのみ「Isaac」と一致します。

この場合、あなたが望む(?<!...のは否定の後読みアサーションです。これは、一致させたいテキストの後ではなく、前にあるテキストの一致を回避しようとしているためです。正規表現ドキュメントから:

文字列内の現在位置の前に ... の一致がない場合に一致します。これは、否定後読みアサーションと呼ばれます。肯定的な後読みアサーションと同様に、含まれるパターンは固定長の文字列にのみ一致する必要があります。否定の後読みアサーションで始まるパターンは、検索される文字列の先頭で一致する可能性があります。

代わりに、次のような正規表現が得られます。

re.compile(r"(?<!Profile Pictures)</strong></a><div class=\"photoTextSubtitle fsm fwn fcg\">(\d+) photos</div>")

もちろん、あなたからのいくつかの例なしでこれをテストすることは困難です.

于 2012-09-10T04:23:01.520 に答える