2012-02-23 1 views
2

私はフレーズのリストを持っています(ユーザによる入力)。例:python、re.search/re.splitは、タイトルのように見えるフレーズ、つまり上手いケースから始まるものです。

titles = ['Blue Team', 'Final Match', 'Best Player',] 
    text = 'In today Final match, The Best player is Joe from the Blue Team and the second best player is Jack from the Red team.' 

1 /私はそう

titre = re.compile(r'(?P<title>%s)' % '|'.join(titles), re.M) 
    list = [ t for t in titre.split(text) if titre.search(t) ] 

は次のようにこれらの語句の出現をすべて見つけることができます

2/I(簡単にするために、私は完璧な間隔を想定しています。)これらのフレーズの変形を見つけることもできます。 「ブルーチーム」、「ファイナルマッチ」、「ベストプレイヤー」...テキストを使用する場合はre.Iを使用します。

しかし、入力句の変種のみを最初の文字を大文字にして検索することに限定したいとします。彼らが入力としてどのように入力されたかにかかわらず、テキスト中の「青チーム」。 '青い目'。

フレーズの一部にre.Iフラグを「ブロックする」ことができますか?擬似コードで、私は '[B] lue Team | [F] inal Match'のようなものを生成すると想像します。

注:私の主な目標は、たとえば、テキスト中の入力フレーズの頻度を計算するのではなく、テキストフレーズ間のテキストフラグメントを抽出して分析することです。正規表現を使用して、ケースフラグが適用される無視するだけで地域を指定することができないだろうと思い

l = [ t for t in titre.split(text) if titre.search(t) and t[0].isupper() ] 

答えて

1

私はre.Iを使用してにリスト-COMPを変更します。考慮して一致します無視フラグなし

new_text = ' '.join([word[0] + word[1:].lower() for word in text.split()]) 

この方法では、正規表現:ただし、すべての文字が下の同棲されたテキストの新バージョンが、すべての単語の最初のものを生成することができますそれぞれの単語の最初の文字についてのみケーシングを説明します。

+0

正規表現のtitreを実際に生成し、フレーズの前後の前後のコンテキストを分析するために使用したいと付け加えておきます。 – quanalyst

1

+0

+1;このようにすることを考えていなかった。 – bernie

+0

電池を使用してください: 'text.title()'。 –

+0

@jcollado:ありがとう!私は少しの周りを検索し、それが1つまたは2つの正規表現で行うことができないと思われる。これは、状況分析のために働くだろう。一致するフレーズ間に元のテキスト断片を再構成するには、別の手順が必要です。しかし、それらの断片は、その長さに基づいて簡単に見つけることができます。 – quanalyst

0

正規表現で使用する前に入力を修正して正しい大文字にする方法はありますか?

+0

提案していただきありがとうございます。理想的には、これらのユーザー入力フレーズはタイトル(「ブルーチーム」または「ブルーチーム」のいずれか)としてテキストに表示する必要がありますが、テキスト中に開始単語のみが大文字になります。もしそうでなければ、私はこのフレーズを無視しても問題ありません。 – quanalyst

関連する問題