str_html_tag02
= '''<td rowspan="2" class="colC">
<p>Bランク</p>
</td>'''
pythonにおいて
htmlのタグを表す上記のような変数があるときに、
tdタグのうちの開始タグの
「<td」と「>」の間にある キーと値のペアである
属性をすべて取得するような
正規表現のパターンというのは
どのようなものになるのでしょうか?
pattern
= r'<td\s+([A-Za-z0-9]+\s*=\s*[A-Za-z0-9]+)+>'
というような感じでキーと値が=で結ばれているものがいいのですが・・・
+, ?, *が正しい組み合わせになるような感じで
作成していただけないでしょうか?
↓
`<td` タグの開始部分から `>` の間にある属性
(キーと値のペア)を正規表現で取得するには、
以下のようなパターンを使用できます。
```python
import re
pattern = r'<td\s+([^>]+)>'
match
= re.search(pattern, str_html_tag02)
if match:
attributes = match.group(1).strip()
# 出力: rowspan="2" class="colC"
print(attributes)
```
しかし、これだけでは
`rowspan="2" class="colC"` の全体が取得できるだけなので、
キーと値のペアを分割するにはさらに正規表現を使います。
以下のようにすると、
キーと値のペアを辞書形式で取得できます。
```python
import re
str_html_tag02
= '''<td rowspan="2" class="colC">
<p>Bランク</p></td>'''
pattern = r'<td\s+([^>]+)>'
match = re.search(pattern, str_html_tag02)
if match:
attributes_str = match.group(1)
attr_pattern
= r'([A-Za-z0-9_-]+)\s*=\s*"([^"]+)"'
attributes
= dict(re.findall(attr_pattern, attributes_str))
# 出力: {'rowspan': '2', 'class': 'colC'}
print(attributes)
```
### 正規表現の解説:
1. `<td\s+([^>]+)>`
- `<td` から始まり、
1つ以上の空白文字 `\s+` の後に続く `>`
までのすべてをキャプチャ
- `([^>]+)` の部分で `>`
までのすべての属性部分を取得
2. `([A-Za-z0-9_-]+)\s*=\s*"([^"]+)"`
- 属性名: `[A-Za-z0-9_-]+`(英数字と `_` `-` を許可)
- `\s*=\s*` で `=` の前後の空白を許容
- `([^"]+)` で `"` で囲まれた値を取得
この方法で `<td>` の属性を適切に取得できます。
コメント
コメントを投稿