1

以下のコードを使用して、繰り返されるフレーズを検索 (抽出) しようとしています。「およそ」で始まり「クローズ」で終わるフレーズが必要です。

たとえば、「総資産で約 1 億 6,290 万ドル、総預金で 1 億 4,450 万ドルが閉鎖されました」

str_locate(x,"(\b[Aa]pproximately\b)(.*)(\b[Cc]losed\b)")

str_extract(x,"(\b[Aa]pproximately\b)(.*)(\b[Cc]losed\b)")

上記のコードは、フレーズの開始点と終了点に対して NA を返します。フレーズが配置されている文字ベクトルのサンプルを次に示します (公開されている FDIC 情報の Web ページです)。

"206-4662).\r\n\r\n12 月 \r\n\r\n\r\n 総資産約 1 億 6,290 万ドル、総預金額 1 億 4,450 万ドルのウエスタン ナショナル バンク、フェニックス、アリゾナ州が閉鎖されました。ワシントンワシントン州シアトルのフェデラルは、特定の仲介預金を除くすべての預金を引き受けることに同意しました。\r\n(PR-195-2011) \r\n\r\n\r\n\r\n エメラルド コーストのプレミア コミュニティ バンク、総資産約 1 億 2600 万ドル、総預金額 1 億 1210 万ドルのフロリダ州クレストビューが閉鎖されました。フロリダ州パナマシティのサミット銀行は、すべての預金を引き継ぐことに同意しました。\r\n(PR-194-2011)"

私はそれに慣れていないので、正規表現を間違って使用している可能性があるので、アドバイスをいただければ幸いです。

4

1 に答える 1

5

\bASCII バックスペースです。「単語境界」を意味する場合は、バックスラッシュをエスケープする必要があります。

str_locate(x,"(\\b[Aa]pproximately\\b)(.*)(\\b[Cc]losed\\b)")

また、後で大文字と小文字を確認する場合を除き、キーワードを括弧で囲む必要はありません。また、正規表現に関数を使用するときに、大文字と小文字を区別せずに(?i)修飾子と一致させることができます。perl()

最後に、 と の間に改行があると は一致しないことに注意してください.*(これは で修正できます)。文字列に複数のキーワードのペアが存在する場合、望ましくない結果が生じる可能性があります。approximatelyclosed(?s)

したがって、おそらく正規表現を次のように変更する必要があります

str_locate(x, perl("(?is)\\bapproximately\\b(.*?)\\bclosed\\b"))
于 2012-09-25T10:17:44.740 に答える