1

文のリストから「squirrel」という単語を見つける正規表現を作成しようとしています。この式は、「squirrel」という単語を含む完全な文のリストを返す必要があります。

「リス」という単語を含む文は、次の文のようになります。

リスは長いしっぽを持っている (.) say (.) long tail .
猫 (a)n(d) リス (a)n(d) ウサギ (a)n(d) バニー (a)n(d) (.)
リス+尻尾がある

私が持っている電流reはこのように見えます

word_only += re.findall('(.*?' + word + '?!\S)', sentence)  
word_only += re.findall('.*?' + word + '\S+', sentence)   

ただし、単語 ("squirrel") の前にあるものだけを返し、その後にあるものは返しません。

何か案は?ありがとう

4

2 に答える 2

4

ここで正規表現を使用する必要はまったくありません。

#The example string:
s = '''the squirrel has a long tail (.) say (.) long tail .
cats (a)n(d) squirrels (a)n(d) rabbits (a)n(d) bunnys (a)n(d) (.)
the squirrel+has a tail'''

sentencelist = s.split(".") #split on periods
[sentence for sentence in sentencelist if sentence.find("squirrel") != -1]
#If you don't find any squirrels, hold fire! 

一方、略語/タイトルがある場合、このスクリプトは非常に多くの文に分割されます。このような問題に取り組まなければならなかったとき、私は のような正規表現を使用し、\.\s+(?=[A-Z])マッチで分割することになりました。これにより、NAACP などの略語は修正されますが、Mr. Smithers などのタイトルは修正されません。私は最終的にタイトルの辞書を作成し、正規表現とカウントが完了するまでピリオドをサブスクライブしました。YMMV。

于 2012-05-25T23:48:20.253 に答える
0

私の理解が正しければ、それぞれが単一の文を含む文字列のリストを持っています。

squirrel_sentences = []
for sentence in sentences:
    if re.match(word):
       squirrel_sentences.append(sentence)

複数の文を含む単一の文字列がある場合は、次の正規表現の一致を試すことができます。これは、含まれるピリオドからピリオドまでの文字のスパンを見つけますsquirrel(および で最初と最後の文もサポートし\Aます\Z):

(?:\A|(?<=.))[^.]*squirrel[^.]*(?:.|\Z)
于 2012-05-25T18:13:25.917 に答える