-1

見つかった一致の周りの単語を取得する方法を探していましたが、私の場合は複雑すぎました。必要なのは、一致した単語の前後にある 10 個の単語を取得するための正規表現ステートメントだけです。それを行うためのパターンを設定するのを手伝ってくれる人はいますか?

たとえば、次の文を見てみましょう (意味がありません)。

    sentence = "The hairy yellow, stinkin' dog, sat round' the c4mpfir3 and ate the brown/yellow smore's that the kids(*adults) were makin."

そして、smore の前後の 3 つの単語に一致させたいとしましょう (既に一致するようにクリーンアップされています)。出力は次のようになります。

   "ate the brown/yellow smore's that the were"

次に、臭いの前後に 1 つの単語を取りたい例を見てみましょう。

   "yellow, stinkin' dog"

もう一つの例。"土":

   "yellow, stinkin' dog, round' the and

では、新しい文を作ってみましょう:

   sentence = "If the problem is still there after 30 minutes. Give up"

そこの単語を一致させようとしていて、出力の前後に2つの単語を使用すると、次のようになります。

   "is still there after minutes"

10 ではないことはわかっていますが、例を理解できたと思いますか? そうでない場合は、お知らせください。さらに提供します。これを作っているうちに、当初思っていた以上に自分がどれだけ欲しいかを実感しました。私は正規表現にはかなり慣れていませんが、パターンを試してみます。

    ('[a-zA-Z\'.,/]{3}(word_to_match)[a-zA-Z\'.,/]{3}')

ありがとう

4

2 に答える 2

1

「単語」の一般的な定義は次のとおりです。スペース以外の文字列。別の例: 文字と数字の文字列ですが、句読点はありません。Python には、両方の便利なショートカットがあります。

\wは、2 番目の意味を持つ任意の「単語」文字 (文字と数字) であり、その他の\W任意文字です。次のように使用します。

m = re.search(r'((\w+\W+){0,4}grab(\W+\w+){0,4})', sentence)
print m.groups()[0]

最初の定義を好む場合は、 (\Sスペースではない任意の文字) と\s(任意のスペース文字) を使用してください。

re.search(r'((\S+\s+){0,4}grab(\s+\S+){0,4})', sentence)

前後に 0 ~ 4 個の単語を一致させていることがわかります。そうすれば、単語が文の 3 番目にある場合でも一致します。(検索は「貪欲」なので、可能であれば常に 4 つ取得します)。

于 2012-06-14T22:03:01.973 に答える
1

この正規表現で始められます

((?:\w*\s*){2})\s*word3\s*((?:\s*\w*){2})

グループ 1 にはターゲットの前の単語があり、グループ 2 にはターゲットの後に来る単語があります。

この例では、2 つの単語をキャプチャするように選択していますが、これは自由に調整できます。

それがどうなるか、そしてあなたの入力でうまくいくかどうか教えてください。

この短いアドバイスhttp://worksol.be/regex.htmlを読むことで、質問を改善できます。

ここに画像の説明を入力

于 2012-06-14T20:54:16.317 に答える