

# 問題

スクレイピングをしていまして、以下のデータから「新宿」を抜き出したいです。

[code]

    <td>1</td>, <td class="stationName"><a href="http://www.jreast.co.jp/estation/station/info.aspx?StationCD=866">新宿</a></td>, <td>355,778</td>, <td>419,608</td>, <td>775,386</td>, <td>△ 1.8</td>,
    
[/code]

そこで、[こちら](https://www-creators.com/tool/regex-
checker?r=\(%3F%3C%3D\(%3Ctd%20class%3D%22stationName%22%3E%3Ca%20href%3D%22.*%22%3E\)\)\(.*%3F\)\(%3F%3D%3C%2Fa%3E\))の正規表現チェッカーで作成した正規表現を確認しました。

[![画像の説明をここに入力](https://i.stack.imgur.com/VXdWp.jpg)](https://i.stack.imgur.com/VXdWp.jpg)

そして、取得できることを確認したあとに以下のコードを実行しました。

[code]

    import re
    data = '<td>1</td>, <td class="stationName"><a href="http://www.jreast.co.jp/estation/station/info.aspx?StationCD=866">新宿</a></td>, <td>355,778</td>, <td>419,608</td>, <td>775,386</td>, <td>△ 1.8</td>'
    
    r = re.findall('(?<=(<td class="stationName"><a href=".*">))(.*?)(?=</a>)', data)
    
[/code]

すると`findall`で以下のようなエラーがでます。

[code]

    ---------------------------------------------------------------------------
    error                                     Traceback (most recent call last)
    <ipython-input-24-a625cd10ed2c> in <module>()
          1 # station_name_list = []
    ----> 2 r = re.findall('(?<=(<td class="stationName"><a href=".*">))(.*?)(?=</a>)', data2[0])
          3 
          4 for num in r:
          5   station_name_list.append(num[1])
    
    4 frames
    /usr/lib/python3.7/sre_compile.py in _compile(code, pattern, flags)
        180                 lo, hi = av[1].getwidth()
        181                 if lo != hi:
    --> 182                     raise error("look-behind requires fixed-width pattern")
        183                 emit(lo) # look behind
        184             _compile(code, av[1], flags)
    
    error: look-behind requires fixed-width pattern
    
[/code]

正規表現に慣れておらず、後読みの固定幅の設定が必要なのですが、どのようにすればいいのかわかりませんでした。

わかる方教えていただきたいです。よろしくお願いします。


CC BY-SA 4.0
2021-06-12T08:38:59.330
77502
2022-09-03T13:05:20.560
44467
question
python 正規表現
正規表現でエラーがでるのですが、後読みの固定幅について教えていただきたいです。


先読み後読みする必要がなかったため以下に変更したところ動きました。

[code]

    import re
    data = '<td>1</td>, <td class="stationName"><a href="http://www.jreast.co.jp/estation/station/info.aspx?StationCD=866">新宿</a></td>, <td>355,778</td>, <td>419,608</td>, <td>775,386</td>, <td>△ 1.8</td>'
    
    r = re.findall('<td class="stationName"><a href=".*?">(.*?)</a>', page)
    
    # 新宿と表示
    
[/code]


CC BY-SA 4.0
2021-06-12T11:57:31.383
77510
2021-06-12T11:57:31.383
44467
77502
answer