前提・実現したいこと
python初心者です。正規表現について質問です。
requestsで取得した値の特定の文字列の後の文字列を抽出し、それを行列に格納したいと考えています。
拙い文章で申し訳ございません。ご回答お願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
「node1":"」は一番最初に出現する部分、「"」は一番最後に出現する部分にマッチしてしまい、
.*
は、マッチする中で最大のものにマッチしますので、そうなります。
node1":"
の後の最初の"
にマッチしたければ、「最小マッチ」を使って'node1":"(.*?)"'
、または「"
以外の繰り返し」を使って'node1":"([^"]*)"'
です。
なお、普通は正規表現を使わず、こうです。
Python
1import json 2 3for m in json.loads(response.text): 4 print(m["node1"])
投稿2020/08/03 00:30
編集2020/08/03 00:41総合スコア85949
0
「後読み言明」というのを使うといいと思います。
言明とは、簡単に言うと「位置」にマッチする正規表現です。本件では、《「"node1":」の直後の位置に続く""に挟まれたテキスト》にマッチするような正規表現を用意すればいいわけです。
import re testtext = ''' [{"node1":"as1border1","node1interface":"GigabitEthernet0/0","node2":"as1core1","node2interface":"GigabitEthernet1/0"},{"node1":"as1border1","node1interface":"GigabitEthernet1/0","node2":"as2border1","node2interface":"GigabitEther\ net0/0"},{"node1":"as1border2","node1interface":"GigabitEthernet0/0","node2":"as3border2","node2interface":"GigabitEthernet0/0"},{"node1":"as2border1","node1interface":"GigabitEthernet2/0","node2":"as2core2","node2interface":"Giga\ bitEthernet1/0"},{"node1":"as2dept1","node1interface":"GigabitEthernet0/0","node2":"as2dist1","node2interface":"GigabitEthernet2/0"}] ''' for m in re.finditer(r'(?<="node1":)"(.*?)"',testtext): print(m.groups())
投稿2020/08/02 17:19
総合スコア13692
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/03 13:10