1

ターゲットの単語または単語を html 内 (つまりタグ内) で検索しますが、アンカーまたはスクリプト タグ内では検索しない reg 式が必要です。私は何年も実験して、これを思いついた

(?!<(script|a).*?>)(\btype 2 diabetes\b)(?!<\/(a|script)>)

この場合、置換するターゲットが 2 型糖尿病であると仮定します。

これはよくある質問だと思いますが、すべての参照はアンカーの一部であり、アンカーやスクリプトタグではなく、それらや他のタグの中にあることを示しています

これは、 http://regexpal.com/http://gskinner.com/RegExr/の両方 を上記の式と以下のテスト データで使用したテスト データです。アンカーまたはスクリプト タグのセット間のビットを除外せずに、アンカーまたはスクリプト タグ。

以下の試験データでは「2型糖尿病」のみ

<p></p>

捕まえるべきです。

<a href="https://www.testsite.org.uk">
<div><img alt="logo" src="/images/logo.png" height="115" width="200" /></div>
<h2>Healthy Living for People with type 2 Diabetes</h2>
</a>
<p>type 2 Diabetes</p>
<a id="logo" href="https://www.help-diabetes.org.uk">
<div><img alt="logo" src="/images/logo.png" height="115" width="200" /></div>
<h2>Healthy Living for People with type 2 Diabetes</h2>
</a>
4

2 に答える 2

0

この問題には正規表現を使用しないでください。html パーサーを使用します。BeautifulSoupを使用したpythonのソリューションは次のとおりです。

from BeautifulSoup import BeautifulSoup

with open('Path/to/file', 'r') as content_file:
    content = content_file.read()

soup = BeautifulSoup(content)

matches = [el for el in soup(text=re.compile(r'type 2 diabetes')) if el.name not in ['a','script']]

# now you can modify the matched elements

with open('Path/to/file.modified', 'w') as output_file:
    output_file.write(str(soup))
于 2013-06-11T14:43:05.750 に答える