html_タグ_の内部にtextとimgなどが混在している場合の正規表現でのtext部分にマッチさせるパターン


--------------------------------------------------------------

import re


str_tag = '<button>text<img src="image.png">text02</button>'


# 正規表現パターン

pattern = r'>([^<]+)<'


# テキスト部分を抽出

matches = re.findall(pattern, str_tag)


print(matches)  # ['text', 'text02']


--------------------------------------------------------------



str_tag = "<button>text<img src=\"image.png\">text02</button>"


pythonにおいて

上記のようなhtml要素を表す文字列の変数があるとき、


<>で囲まれているタグの部分以外のtext, text02が

様々な値になる場合に

正規表現でマッチさせることはできるのでしょうか?


そうであれば、そのパターンをおしえていただけないでしょうか?



正規表現を使って、

HTMLタグに囲まれていないテキスト部分

(`text` や `text02`)を抽出することは可能です。



### **正規表現の考え方**


1. **HTMLタグ `< >` に囲まれた部分をスキップする**  


   - `<>` で囲まれている部分をマッチさせ、取得しないようにする。

   

2. **タグの間にあるテキストを取得する**

  

   - `>` の後ろのテキストと `<` の前のテキストを抽出する。


### **正規表現**


以下のパターンを使えば、

タグに囲まれていないテキスト部分を取得できます。


```python


import re


str_tag

 = '<button>text<img src="image.png">text02</button>'



# 正規表現パターン

pattern = r'>([^<]+)<'


# テキスト部分を抽出

matches = re.findall(pattern, str_tag)


print(matches)  # ['text', 'text02']



```


### **解説**


- `>` … `>`(開始タグの終わり)を探す


- `([^<]+)` … `<>` に囲まれていない部分

(テキスト)をキャプチャする


- `<` … 次のタグの開始 `<` でマッチを止める



### **ポイント**


- `>` の後ろから `<` の前までのテキストを取得するため、

タグで囲まれていない部分のみ取得できます。


- `<img>` のように自己終了タグ

(`<img src="image.png">`)があっても、正しく動作します。


### **出力**


```plaintext


['text', 'text02']


```


この方法を使えば、

様々なテキストが変化しても

タグに囲まれていない部分だけを抽出できます。


コメント