0

正規表現を「*」に置き換えたいのですが、正規表現が <> の外側にある場合のみです。全体のポイントは、html タグに干渉しないことです。

これを使用して置き換えます:

re.sub(r'SOMEREGEX(?=[^>]*(<|$))', '*', line)

しかし、私は彼の問題に遭遇しました:私の正規表現が次の場合:

f.*k

次に、これ:

fzzzzzzzzz<HTMLTAG>zzzzzzzk

私が望まない「*」になるでしょう。この問題を解決するにはどうすればよいですか?

制約:

-すべてのブラケットが一致しています

-ネストされたブラケットなし

-SOMEREGEX はユーザーによって提供されます。私はそれを変更しない方が好きです。

4

2 に答える 2

2

.文字(「すべての文字」)を、山かっこ以外[^<>]の任意の文字と一致する文字クラスに置き換えてみることができます。これにより、正規表現が得られます。これは一致しますが、一致しません。<>f[^<>]*kfacebookface<b>book

ただし、これでうまくいかないことがまだあります。正規表現の代わりに適切なHTMLパーサーを使用することを検討しましたか?BeautifulSoupは簡単で、美味しくて楽しいです。

于 2012-06-15T23:08:36.007 に答える
0

山かっこの終わりと始まりの間を検索します。

re.sub(r'(^|>)f[^<]*k(<|$)', r'\1*\2', line)

\1とは\2、パターンによって から削除された山括弧を置き換えるために必要ですline

于 2012-06-15T23:37:25.340 に答える