3

Python で正規表現を使用してページ ソースを検索し、javascript ですべての json 情報を見つけています。具体的な例は次のようになります。

var fooData = {
    ID: 123456789、
    名前:「フーバー」、
    country_name: "フー",
    country_is_eu: null,
    foo_bars: ヌル、
    foo_email: ヌル、
    foo_rate: 1.0,
    foo_id: 0987654321
};

私は正規表現について知っておくべきことをすべて理解するのにかなり慣れていないので、自分がやっていることは正しいかどうか確信が持てません。個々の行をいくつか取得できますが、re.MULTILINE の使用方法が完全にはわかりません。これは私が今持っているコードです:

prog = re.compile('[var ]?\w+ ?= ?{[^.*]+\n};', re.MULTILINE)
vars = prog.findall(text)

なぜこれが機能しないのですか?

より明確にするために、次のようにこれらのブラケットの間のすべてを一致させる必要があります。

var fooData = {

};

したがって、基本的に、次のような行を除くすべての行を一致させる方法を理解できません。

};
4

3 に答える 3

2

これは、ブラケットを含めずに探しているものです。

(?<=var fooData = {)[^}]+(?=};)
于 2012-12-22T05:06:48.920 に答える
0

よくわからない場合は、常にドキュメントを参照してください (Python には非常に適しています)。

複数行モードでは、キャレット (^) で始まり ($) で終わる正規表現が作成され、それぞれの行の先頭と末尾に一致します (「行」とは、改行文字の直後に続くものです\n)。

\n正規表現の最初と最後に s を付けることで、すでにこれを説明しているようで、findall()関数を使用しています。

于 2012-12-22T04:09:26.807 に答える
0

わかった!複数行モードも必要ないことが;わかりました。括弧の間で終わらないすべての行を一致させただけです。また、ブラケットなどを見つけるために正規表現を少し変更しました。これが私のコードです。

re.findall('(?:var )?\w+[ ]?=[ ]?{\n(?:.+(?!(?<=;))\n)+};', text)

X.Jacobs のおかげで、コードを次のように簡略化 (および修正) しました。

re.findall('(?:var )?\w+\s*=\s*{[^;]+};', text)
于 2012-12-22T05:06:34.633 に答える