1

なぜこれが機能しないのかわかりません:

import re
import csv

def check(q, s):
  match = re.search(r'%s' % q, s, re.IGNORECASE)
  if match:
    return True
  else:
    return False

tstr = []

# test strings
tstr.append('testthisisnotworking')
tstr.append('This is a TEsT')
tstr.append('This is a    TEST    mon!')

f = open('testwords.txt', 'rU')
reader = csv.reader(f)
for type, term, exp in reader:
  for i in range(2):
    if check(exp, tstr[i]):
      print exp + " hit on " + tstr[i]
    else:
      print exp + " did NOT hit on " + tstr[i]
f.close()

testwords.txtには次の行が含まれています。

blah, blah, test

したがって、本質的に「テスト」は正規表現パターンです。複雑なことは何もありません。簡単な言葉です。出力は次のとおりです。

test did NOT hit on testthisisnotworking
test hit on This is a TEsT
test hit on This is a    TEST    mon!

なぜ最初の文字列にヒットしないのですか?私も\s*test\s*運が悪かった。ヘルプ?

4

2 に答える 2

6

モジュールはデフォルトで入力の単語のcsv周りに空白を返します(これは別の「方言」を使用して変更できます)。したがって、先頭にスペースexpが含まれます。" test"

これを修正する簡単な方法は、次を追加することです。

exp = exp.strip()

CSVファイルから読み取った後。

于 2012-06-13T20:36:05.190 に答える
3

print repr(exp)最初のforループの先頭にを追加すると、expつまり' test'、先頭のスペースに注意してください。

カンマで分割されるため、これはそれほど驚くべきことではありませんcsv.reader()。コードを次のように変更してみてください。

for type, term, exp in reader:
  exp = exp.strip()
  for s in tstr:
    if check(exp, s):
      print exp + " hit on " + s
    else:
      print exp + " did NOT hit on " + s

先頭の末尾の空白を削除する呼び出しに加えて、2番目のforループを、範囲ではなくstrip()文字列を直接ループするように変更していることに注意してください。tstr3つの値が含まれているため、実際には現在のコードにバグがありましたがtstr、最初の2つだけをチェックしたのは、とfor i in range(2)だけが表示されるためです。i=0i=1

于 2012-06-13T20:37:47.840 に答える