python
  • html
  • regex
  • 2017-07-14 14 views 3 likes 
    3

    正規表現を "anything"とマッチさせることができましたが、特定のトークンと一致するようにしようとしましたが、私はこの答え(Match everything except for specified strings)に従っていましたが、 ...正規表現以外のものと一致する正規表現

    ここで問題が

    (?!.*(</a>))* 
    

    にあなたが2個のエラーを持っているということである例

    text = '<a> whatever href="obviously_a_must_have" whatever <div> this div should be accepted </div> ... </a>' 
    
    regex = r'<a[^><]*href=\"[^\"]+\"(?!.*(</a>))*</a>' #(not working as intended) 
    
    [^><]* #- should accept any number of characters except <and>, meaning it shouldn't close the tag nor open a new one - *working*; 
    href=\"[^\"]+\" #- should match an href - *working*; 
    (?!.*(</a>))* #- should match anything but the end of the tag a - *NOT WORKING*. 
    
    +1

    何が問題なのですか? [正規表現はhtmlを解析するための適切なツールではありません。](https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 ) –

    +0

    ちょっとそこに@HåkenkenLid、正規表現の3番目の部分が意図したとおりに動作していません。そして、心配しないで!私は正当な方法のhtmlを解析している;)しかし、私はタグのすべての種類、ちょうど特定のものが欲しいわけではないので、まだこの正規表現を特定の基準に一致するために使用する必要があります。これは単なる例です! –

    +0

    '(?!)'ネガティブルックアヘッドグループの直後に '*'量子を置くことはできません。グループは数値化できません。オンラインエディタでコードを試してみるとすぐに分かります(https:// regex101。com/r/qAlpvE/1)。その '*'量子で何をしようとしているのか100%確信していませんか? –

    答えて

    0

    です。

    • /をエスケープする必要があります。代わりに\/を使用してください。

    • *を別の*に使用することはできません。 regex101でそれを試してください:* The preceding token is not quantifiableと言うでしょう。私は強くその正規表現のテストと理解のためのサイトをお勧めします。

    テキストと正規表現が一致しない場合、あなたの最初の部分はうまくいきません。

    はのは、最初にこれを試してみましょう:正規表現がはるかに優れて

    <a>[^><]*href=\"[^\"]+\".*(?:<\/a>) 
    

    こと、それはあなたのテキストと一致します。しかし、余分なものとテキストにマッチするので、まだ完全ではありません。私たちは、余分な終わりが本当の終わりの前のどこかにあることを望んでいません。

    <a>[^><]*href=\"[^\"]+\"(?:(?<!<\/a>).)*(?:<\/a>) 
    

    をしかし、あなたはhereを見ることができるように、それは単に最初の終了タグとigniores他人に一致します。それでは、負の後読みを追加してみましょう。そして私たちはそれを見たいと思っています。また、追加の開始タグは必要ありません。開始と終了で試合を制限しましょう。

    ^<a>[^><]*href=\"[^\"]+\"(?:(?<!<\/a>).)*(?:<\/a>)$ 
    

    Hereがテストです。

    多分、あなたはhrefを<a...>に保ちたいのですか?以下のように何か:

    '<a whatever href="obviously_a_must_have"> whatever <div> this div should be accepted </div> ... </a>' 
    

    その後、正規表現は次のようになります。

    ^<a[^><]*href=\"[^\"]+\"[^><]*>(?:(?<!<\/a>).)*(?:<\/a>)$ 
    

    テストはhereです。

    正規表現を開発している間に、まず何かを単純にし、多くの。*がすべてにマッチし、段階的にそれらを実際の部分に合わせて変更することをお勧めします。

    関連する問題