2017-09-10 2 views
-2

私は個人的な代名詞と '?'の間にある特定の単語の長さを得る正規表現をしようとします。 findallと一緒に。 私はいくつかの調査をしましたが、文字列が...と終わるかどうかをチェックする方法が見つからなかったのですが...と終わりです。 EDIT囲まれているとPythonの正規表現がマッチする

:ここ はexempleです:

Are you crazy ? -> match because there a personal pronouns AND a '?' between the word 
you are crazy ? -> No, because the word is between a verb and a '?' 
Is he crazy ? -> match because there a personal pronouns AND a '?' between the word 
+0

入力と希望出力を投稿してください。 – Ajax1234

+4

あなたが望むものを正確に伝えるのは難しいです。私たちにいくつかの例を提供してください。あなたの正規表現と一致するものは何ですか?何もしないでください。 – slezica

+0

私は私の質問を編集しました。 – Wadoo

答えて

0
あなたが一致しない場合、トリックを行う必要があります

形式:

>>> import re 
>>> pat = '(?:I|you|he|she|it|we|they|me|him|her|it|us|them) (?:an?)?(\w\w+)\s?\?' 
>>> re.findall(pat, "is he available ? Isn't she a jerk ?") 
['available', 'jerk'] 

それ以外の場合、これはうまくいくかもしれない。この第二の方法については

>>> import re 
>>> pat = '(?:I|you|he|she|it|we|they|me|him|her|it|us|them)((?: [a-z]+)+)\s?\?' 
>>> filt = re.findall(pat, "is he available ? Isn't she a jerk ? you are crazy ?") 
>>> filt 
[' available', ' a jerk', ' are crazy'] 
#Then to get the number of times crazy appeared in a question : 
>>> len([el for el in filt if "crazy" in el]) 
1 

を、あなたが実際に個人の代名詞との間にあるすべて抽出するために、2つのフィルタ、いずれかの操作を行います「を?」。次に、これらの質問形式の中に対象単語が何回あるかを数えるために2回目のフィルタリングを行います。しかし、後者の場合、多くの控えめな方法は別の正規表現を使うことになります。私の実際の汚い方法は、 "notsocrazy"をマッチとして数えることになります。

+0

説明をありがとう、それは動作します:) – Wadoo

0

あなたは目標:私は長いテキストを持っている 、私はこのような問題として問われる回数言葉「狂気」を見つけたいです後は、正規表現が正義を行うことができるよりもより複雑なようだが、ここに助けることができる一つだ:「?あなたは狂っている」

import re 

word_to_match="crazy" 
pattern = "[^\\.\\?]*\\s(he|she|you|it|they|I)\\s({})\\s?\\?".format(word_to_match) 


print (re.findall(pattern, "Are you crazy? You are crazy? Is he crazy?"))