2

フレーズのリスト (ユーザーが入力) を持っています。テキスト ファイルでそれらを見つけたいと思います。たとえば、次のようになります。

    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./ これらのフレーズの変形例、たとえば「ブルー チーム」、「ファイナル マッチ」、「ベスト プレーヤー」なども検索できます。

ただし、「bluE tEAm」など、入力としてどのように入力されたかに関係なく、テキスト内の「Blue team」などの最初の文字が大文字の入力フレーズのバリアントのみを検索するように制限したいと考えています。

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

注: 私の主な目標は、たとえば、テキスト内の入力フレーズの頻度を計算することではなく、それらの間または周囲のテキスト フラグメントを抽出して分析することです。

4

3 に答える 3

1

正規表現では、大文字と小文字を区別しないフラグを適用できる領域だけを指定することはできないと思います。ただし、すべての文字が小文字になっている新しいバージョンのテキストを生成できますが、すべての単語の最初の文字は次のとおりです。

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

このように、ignoreフラグのない正規表現は、各単語の最初の文字の大文字小文字のみを考慮して一致します。

于 2012-02-23T05:46:47.890 に答える
1

re.Ilist-comp を使用して次のように変更します。

l = [ t for t in titre.split(text) if titre.search(t) and t[0].isupper() ]
于 2012-02-23T05:45:34.667 に答える
0

正規表現で使用する前に、正しいケースになるように入力を変更してはどうでしょうか。

于 2012-02-23T06:30:29.243 に答える