2

説明行で一致するものの配列を作成しようとしています。したがって、後でスクリプトでそれらを無視できます。以下は、私が取り組んでいるサンプル スクリプトです。

基本的に、私は一連の文字列を取得して、それを他の一連の文字列と照合しようとしています。

別名: 文字列内の asdf または asfs または wrtw = true これを出力しない場合はスクリプトを続行します。

import re

ignorelist = ['^test', '(.*)set']

def guess(a):
     for ignore in ignorelist:
             if re.match(ignore, a):
                     return('LOSE!')
             else:
                     return('WIN!')

a = raw_input('Take a guess: ')
print guess(a)

ありがとう

4

2 に答える 2

3

ロジック/フローに少し問題があります。

リストの最初の用語をテストします。一致しない場合は、 に移動し、リスト内の他の用語をテストせずelseに戻ります。"WIN!"

(また、ignorelist関数外です。)

[編集: 正規表現を含めるように質問を編集したのを見たので、回答を編集してreコンテキストにre.search戻します...]この線。re.matchre.match

プログラムをどのように動作させたいかによって、これを変更する方法は無数にあります。

guessこれらの線に沿って書き直します。ignorelist(関数を渡す代わりに、関数内に配置することもできます。):

ignorelist = [r'^test', r'[abc]set']

def guess(a,il):
    for reg in il:
        if re.search(reg,a):
            return "LOSE"
    return "WIN"

a = raw_input()
print guess(a,ignorelist)

この場合、各単語をループし、一致が見つかった場合は終了しますが、一致しない場合 (何も返さずにループを完了)、最終的に を返し"WIN"ます。

于 2013-10-19T03:40:02.967 に答える
1

単一の正規表現を使用するか、コンパイルするには大きすぎる場合はそれらのセットを使用する方がはるかに優れていると思います。何かのようなもの:

GUESSER = re.compile('|'.join(ignorelist))

def guess(a):
    if GUESSER.search(a):
        return('WIN!')
    else:
        return('LOSE!')

注: 「ignorelist」のパターンは、または「|」を使用する場合は、一対の括弧で囲む必要があります。オペレーター。

于 2013-10-19T12:27:12.997 に答える