python_正規表現_htmlタグの内部の_属性の部分を取得するパターン文字列


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>` の属性を適切に取得できます。


コメント