pythonで正規表現を使って文字列操作をするときに、
html要素のうちの終了タグを探索したいときの
その終了タグを表すパターン文字列は
pattern_tag_close = r"</([a-zA-Z0-9-]+)>"
でよろしいでしょうか?
↓
`pattern_tag_close = r"</([a-zA-Z0-9-]+)>"` でも
基本的に動作しますが、以下の点で改善の余地があります。
### 改善点:
1. **HTMLのタグ名には数字が先頭に来ない**
→ `[a-zA-Z0-9-]+` では先頭が数字でもマッチしてしまう。
HTMLではタグ名は英字で始まるので
`[a-zA-Z][a-zA-Z0-9-]*` の方が適切。
2. **自己終了タグの考慮は不要**
→ `</tag>` のような終了タグのみを対象にするので問題なし。
3. **改行や空白の考慮
(特に `< /tag>` のような異常なスペースの考慮)**
→ `\s*` を追加すると、`</ tag>` のような
異常な空白にも対応可能。
### 修正後の正規表現:
```python
pattern_tag_close
= r"</\s*([a-zA-Z][a-zA-Z0-9-]*)\s*>"
```
### 解説:
- `</\s*` → `</` の後にスペース(`\s*`)があってもOK
- `([a-zA-Z][a-zA-Z0-9-]*)`
→ タグ名の先頭は英字、後続は英数字とハイフン
- `\s*>` → タグ名の後にもスペースがあってもOK
### 使用例:
```python
import re
pattern_tag_close
= r"</\s*([a-zA-Z][a-zA-Z0-9-]*)\s*>"
html = "<div>Content</div> <br/> </span> </ div>"
matches = re.findall(pattern_tag_close, html)
print(matches) # ['div', 'span', 'div']
```
`</span>` や `</ div>` のような
異常な空白を含むタグも正しくマッチできます。
コメント
コメントを投稿