ドットを含むダブルクォーテーションに囲まれた文字列の有無を検索

久々に正規表現が分からなくて泣きそう。
「ドットを含む、ダブルクォーテーションに囲まれた文字列」の抽出はできなかったのですが、有無の確認まではできたのでメモっておきます。

やりたいこと

データはjson風。実態はText(←重要!)。

{
    "group":"apple",
    "data":{
        "page":1,
        "Name":"hoge.hoge",
        "value":12.33
    }
},
{
    "group":"banana",
    "data":{
        "page":1,
        "Name":"fugafuga",
        "value":85.0
    }
}

こういう感じ。
実際にはtextデータのため、このデータが改行無くズラッと一行に並んだものが対象です。

このデータの中の、「hoge.hoge」のように、NameがKeyのvalueの中にドットを含むところだけをヒットさせたい。

ややこしいところ

  • ダブルクォーテーションが大量にあるので、「.*?」等を使うと意図しない量の文字列がヒットしてしまう
  • 他のValueには正しいドットがあるからヒットさせたくない
  • 前後の文字列が繰り返し有りのため特定し辛い

つらい。

結局、やったこと

こちらのサイトさんに助けていただきました。
[正規表現] .*?は最短マッチではない - Qiita

"Name":"[^""]*\.

//もしくは

"Name":"[^""]*[.]

こちらで何とか対処。
最後の「\.」でヒットしたドットで検索が終わるので、上記のデータで言えば「12.」までしかヒットしません。
なので「12.33」を引っ張ることは結局できなかったのですが、今回は「ドットを含むValueが一つでもあるかどうか」を検索させたかったため、一応目的は達成しました。

余談

今回、「1つもヒットしなかったらTrue」というスクリプトを組みたかったのですが、これもまた難しかった。

結局スクリプト側で「not.match」させるという方法となり、コードの可読性的にもそちらのほうが正しい気もするのですが、「ドットを含まない・NameのValue・しかヒットしない」という正規表現も書きたかった。
(寝ぼけてるので自信がないですが発想自体はありえなくないですよね)

いつか分かったら追記します。