12

テキストからデータをスクレイピングして配列にダンプしたいと考えています。次のテキストをサンプル データと考えてください。

| Example Data
| Title: This is a sample title
| Content: This is sample content
| Date: 12/21/2012

現在、次の正規表現を使用して、「コロン」文字の後に指定されたデータをスクレイピングしています。

/((?=:).+)/

残念ながら、この正規表現はコロンとコロンの後のスペースも取得します。データのみを取得するにはどうすればよいですか?

また、私がこれを正しく行っているかどうかはわかりません..しかし、外側のかっこが原因で一致が配列を返すように見えます。これは括弧の機能ですか?

編集:Rubularを使用して正規表現をテストしています

4

4 に答える 4

18

次のように変更できます。

/: (.+)/

グループ 1 の内容を取得します。しかし、後読みも機能し、まさにあなたが求めていることを実行します。

/(?<=: ).+/
于 2012-12-17T23:58:23.027 に答える
4

@minitech の回答に加えて、3 番目のバリエーションを作成することもできます。

/(?<=: ?)(.+)/

ここでの違いは、後読みを使用してグループを作成/取得することです。

後読みの概念よりも先読みを好む場合。. .

/(?=: ?(.+))/

これにより、既存の正規表現の周りにグループが配置され、グループ内でキャッチされます。

はい、コードの外側の括弧が一致します。ほとんどの正規表現エンジンの最初の結果は一致した文字列全体を返すため、不必要に/( ... )/なしでa を使用するのではなく、先読み全体が「グループ化」されている後者の例と比較してください。/(?= ... )/

于 2012-12-18T01:45:17.010 に答える
1

あなたが正規表現を求めていることは知っていますが、正規表現のソリューションを見たところ、正規表現に慣れていない人にとっては読みにくいことがわかりました。

私もRubyを使用していますが、次のようにすることにしました。

line_as_string.split(": ")[-1]

これはあなたが必要とすることを行い、IMHOははるかに読みやすくなっています。非常に長い文字列の場合、効率が悪い可能性があります。しかし、この目的のためではありません。

于 2014-08-28T12:46:16.743 に答える