--------------------------------------------------------------
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']
```
この方法を使えば、
様々なテキストが変化しても
タグに囲まれていない部分だけを抽出できます。
コメント
コメントを投稿