3

いくつかの正規表現を試しています。私はパイソンを使用しています。

私の今の仕事は、新聞記事をかき集めて、人が亡くなった事例を探すことです。関連する記事ができたら、他のことのために死亡数を把握しようとしています。いくつかのパターンを考え出そうとしていますが、特に 1 つのパターンに苦労しています。このサンプル記事のセクションを見てください:

[SANAA 10月21日 ロイター] - イエメンで10月21日、米軍が無人機で車を攻撃し、アルカイダの武装勢力とみられる3人の男性が死亡したと、部族の情報筋や地元当局者が明らかにした。

「three」を引っ掛けるために使用しているコードは、最初にドキュメント全体で置換を行うため、パターンがまったく適用される前に「three」が「3」になります。この例に関連するパターンは次のとおりです。

re.compile(r"(\d+)\s(:?men|women|children|people)?.*?(:?were|have been)? killed")

このパターンは、数字で始まり、リストされているものの 1 つなどのオプションの名詞が続き、「dead」または「died」を見つける前に最小限の乱雑さがあるという考えです。このパターンがキャッチされるように、部屋を残したい:

3 people have been killed since Sunday

この例では、引き続きインスタンスをキャッチします。

3 men thought to be al qaeda militants were killed

問題は、私が使用しているパターンが、記事の最初の部分から日付を収集し、21 のカウントを返すことです。これまでのところ、どれだけいじっても、範囲を men という単語のすぐ横の数字に制限することはできませんでした。 、その後に分詞句が続き、関連する「殺されました」。

どんな助けでも大歓迎です。REに関しては、私は間違いなく第一人者ではありません。

4

3 に答える 3

3

をオプションにしないでくださいmen|women|children。つまり、閉じ括弧の後の疑問符を削除してください。正規表現エンジンは、繰り返し演算子が貪欲であるかけちであるかに関係なく、最初の可能な場所で一致します。

代わりに、または追加で、"anything here" パターンを数字以外のみに一致.*?させる。\D*?

于 2012-11-04T19:12:55.777 に答える
2

これは、数字の後に一致?する0quantifierを使用したためです。だから、一致します。それはそれらを持っているからです。1(:?men|women|children|people)210

それらの1つに正確に一致するように、その後の量指定子を削除してみてください: -

re.compile(r"(\d+)\s(?:men|women|children|people).*?(?:were|have been)? killed")

UPDATE : -? quantifier必要な結果を使用して取得するには、正規表現を使用して、例のようにa を含む文字列が続いていないLook-Aheadことを確認する必要があります。digithiephen(-)

re.compile(r"(\d+)(?!.*?-.*?)\s(?:men|women|children|people)?.*?(?:were|have been)? killed")
于 2012-11-04T19:13:59.707 に答える
0

間違った構文 を使用しています(:?...)。おそらく使用したかったでしょう(?:...)


正規表現パターンを使用

(\d+).*?\b(?:men|women|children|people|)\b.*?\b(?:were|have been|)\b.*?\bkilled\b

または、これらの単語の間にスペースのみが許可されている場合、

(\d+)\s+(?:men|women|children|people|)\s+(?:were|have been|)\s+killed\b
于 2012-11-04T19:14:53.230 に答える