2017-02-07 13 views
0

txtファイルを扱うre.searchを取得することに若干の問題があります。私の.txtファイルには、 "Python 2.7 - PyCharmを使って書かれた"という文字列をファイルに書き込む小さなコードがあります。これは正しく動作します。次に、正規表現を使用して、 "Written"という単語がファイルに存在することを確認します。ここでPython 2.7 - txtファイル内のre.searchが正しく機能しない

は私のコードです:RETURN_VALUEを印刷した後

FileOpen = open("default.txt", "r") 
FileRead = FileOpen.read() 
return_value = re.search(r"\bWritten\b", FileRead) 
print return_value 

それは希望の単語を見つけて、実行時に検索失敗出力しない:私は、コードの同じ部分をしようとした場合

None 

を変数に割り当てられた単純な文字列では、re.searchを使用して一致が正常に検出されます。i:

string1 = "The fox jumped over the fence" 
re.search(r"\bjumped over\b", string1) 
実行::時に、この出力になり

sre.SRE_Match object... 

しかし、すぐに私は常に「なし」で失敗しているようだ.txtファイルの内容を読んでこのre.search()をしようとして始めると。もし誰かが私がどこに間違っていたのか教えてくれれば大いに感謝します。ありがとう。

+1

'print repr(FileRead)'とは何ですか? (慣例では、大文字で始まる名前はクラスです。変数には 'snake_case'を使用してください) – Ryan

+0

ヒントありがとう、新しいモジュールを作って同じコードを試してみました。問題は、このコードの直上で、私は別のfile.readを直接呼び出すことでした。一度これを削除すると、私の質問に表示されたコードを使用して一致が見つかりました。私はそれが開いて読書のためにすでに開いていたファイルを読んで、問題を引き起こそうとしていたと思います。私の理論が正規表現の失敗を引き起こした理由について正しいのであれば、同意すれば私はこれを答えに加えることができます。 – user3417643

+0

検索される文字列の内容を二重にチェックする方法は、 'return_value.string'を参照することです。 – gregory

答えて

0

これを行うには正規表現は必要ありません。あなたはそれを簡単にすることができます。例えば

>>> f = open("test.txt", "r") 
>>> fr = f.read() 
>>> if "lorem" in fr: 
... print "true" 

はそれがお役に立てば幸いです。

EDIT:

時間テスター:

str内のstrの場合:

t = Timer("""if 'lorem' in open('test.txt', 'r').read(): print 'true'""") 
print t.timeit() 

19.9183969498

正規表現検索:

t = Timer("""import re 
print re.search(r'lorem', open('test.txt', 'r').read()) 
""") 
print t.timeit() 

31.3400061131

:はtimeit()関数を繰り返し100万回。

結論: "if str in str"がはるかに高速です。

+0

これを行う代わりの方法をありがとう。非常に単純なケースでは、私は自分自身がこれをやっているのを見ることができましたが、正規表現を使用すると、パターンに特殊文字を追加できるため、検索フィルタの絞り込みが容易になります。また、より速く実行するもの、REGEX、またはあなたが私に与えた例を知っていますか? – user3417643

+0

私は実行時間を比較するために私の答えを編集しました。 – JazZ

関連する問題