2016-11-30 49 views
1

我写了一个简单的脚本来扫描文件类型(.htm)的目录,打开它们。并替换一些文字。这个脚本在我的家庭计算机(Python 2.7.12)上正常工作,但不在我的工作计算机上(Python 2.7.8),我找不到原因。它根本找不到任何匹配。它正在寻找的文件是相同的格式,编码等正则表达式工作在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 SSION并不完全正确,但我无法看到它。

+0

正则表达式很好。还有其他的东西阻止了正确的脚本执行。注意你可以用'?'替换所有的'''','4'后面的'.'必须被转义。 –

+0

As @WiktorStribiżew指出,[**你的正则表达式工程**](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 
相关问题