0

別の正規表現に問題があります。これについては、私のコードはパターンを探すことになっています:

re.compile(r"kill(?:ed|ing|s)\D*(\d+).*?(?:men|women|children|people)?")

ただし、あまりにも積極的に一致しています。たまたま「殺す」という単語が含まれている文と一致します。ただし、パターンは、テキストのさらに下の桁に達するまで収集を続けます。特に、それは一致しています:

killed in an apparent u.s. drone attack on a car in yemen on sunday, tribal sources and local officials said.the men's car was driving through the south-eastern province of maareb, a mostly desert region where militants have taken refuge after being driven from southern strongholds.yemen, where al qaeda militants exploited a security vacuum during last year's uprising that ousted president ali abdullah saleh, has seen an in10

これは私が求めている行動ではありません。このパターンが1つの文の中に見つからない場合は、失敗させたいと思います。

私が疑似コードで実装しようとしている解決策は次のとおりです。

find instance of 'kill'
if what follows contains a period (\.) before a digit, do not match.

失敗した実装は次のようになります。

re.compile(r"kill(?:ed|ing|s)\D*(?!:\..*?)(\d+).*?(?:men|women|children|people)?")

「後読み」を試しましたが、幅を指定する必要があります。上記で私がやろうとしているのは、「kill」の末尾に一致し、その後に数字以外の文字が続くことですが、ピリオドには一致しません。それ以外は、後の数字の前に自由に続くことができます。

悲しいことに、このコードは私のテストではまったく同じように動作します。どんな助けでもいただければ幸いです。

4

1 に答える 1

3

小さな変更:

r"kill(?:ed|ing|s)[^\d.]*(\d+)[^.]*?(?:men|women|children|people)?"

.基本的に、私はキルと男性/女性などの間で終止符が一致するのを防ぎます。後に続く。

于 2012-11-06T02:04:47.240 に答える