2016-11-30 16 views
1

ファイルタイプ(.htm)のディレクトリをスキャンして開く簡単なスクリプトを作成しました。いくつかのテキストを置き換えます。このスクリプトは私の家庭用コンピュータ(Python 2.7.12)では正常に動作しますが、私の仕事用コンピュータ(Python 2.7.8)では動作しません。それは単にマッチを見つけることはありません。それは見ているファイルと同じ形式である、エンコーディングなどregex式はPython 2.7.12で動作しますが、Python 2.7.8では動作しません。

は、式は次のとおりです。

core = re.compile(r'(.*?)(FeatureCatalogue_Core_v??4\.\d_20[123]\d-??[01]\d-??[0123]\d)(.*?)') 

"FeatureCatalogue_Core_v4.4_2016-12-31"

"FeatureCatalogue_Core_4.4_20161231" に一致する必要があります

と一致する必要があります「FeatureCatalogue_Core_v5.0_2017-12-31」私は単純なものか、私のexpreをしないのです確信しています

と一致してはなりませんシオンはそれほど正しいわけではありませんが、私はそれを見ることができません。

+0

正規表現は問題ありません。正しいスクリプトの実行を妨げる何かがあります。注意すべき点は、 '?'を '?'で置き換えることができ、 '4'の後の' .'はエスケープする必要があることに注意してください。 –

+0

@WiktorStribiżewが指摘するように、[** your regex works **](https://regex101.com/r/6AYjjz/1) - ここには[**最適化バージョン**](https://regex101.com)があります。/r/6AYjjz/2)も同様である。 – Jan

答えて

0

私はこの問題を解決しました。それは実際に一致を見つけることでした。私の「休憩」状態は機能しませんでした。私はカウンターを使って解決策を思いついたので、成功した試行が数多く行われた後には解消されるでしょう。

for x,y,z in os.walk(pathTRD): 
    for doc in z: 
     Path = os.path.join(x,doc) 
     if Path.endswith('.htm'): 
      dataR = open(Path, 'r') 
      filedata = dataR.read() 
      dataR.close() 
      for line in filedata.split(None): 
       for q in Qs: 
        mtch = re.match(q, line) 
        try: 
         Keys1.append(str(mtch.group(2))) 
         winLoop += 1 
        except: 
         pass 
     if winLoop > 6:#<--- this isn't how wanted to do this, but the work computers are being dumb 
        break 
     seekLoop += 1 
関連する問題