正则表达式工作在Python 2.7.12,但不是Python 2.7.8
问题描述:
我写了一个简单的脚本来扫描文件类型(.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并不完全正确,但我无法看到它。
答
我解决了这个问题。它实际上是找到匹配。我的'休息'条件不起作用。我通过使用计数器提出了一个解决方案,所以经过如此多的成功尝试之后,它会破裂。
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
正则表达式很好。还有其他的东西阻止了正确的脚本执行。注意你可以用'?'替换所有的'''','4'后面的'.'必须被转义。 –
As @WiktorStribiżew指出,[**你的正则表达式工程**](https://regex101.com/r/6AYjjz/1) - 这是一个[**优化版本**](https://regex101.com/r/6AYjjz/2)。 – Jan