【发布时间】:2018-01-25 11:25:52
【问题描述】:
我正在使用 Python 3.6.3 和 2.7.3 版本运行相同的脚本。该脚本在 2.7.3 中运行良好,但在 3.6.3 中却不行。似乎区别在于我的代码的正则表达式部分。
我正在为两个脚本版本在同一个外部文件中搜索一些字符串,将命中保存在列表中。结果列表的len() 对于两个版本是不同的。
我试图通过创建一个用于正则表达式的小文件来制作一个重现错误的 MWE,但是两个版本的 Python 都会产生相同的输出。我唯一的解决方案是提供原始文件。但这是一个相当长的文本文件,所以您可以从这里下载:https://ufile.io/jjc56 此文件有效期为 30 天。我认为这可能比将所有内容都粘贴到问题中更好。
这段代码重现了错误。
import re
inputfile = "opt-guess-firsttetint-r-h2o.out"
with open(inputfile,"r") as input_file:
input_string = input_file.read()
input_file.close()
match_geometry = list(re.findall('CARTESIAN COORDINATES \(ANGSTROEM\)(.*?)CARTESIAN COORDINATES \(A\.U\.\)', input_string, re.DOTALL))
match_energy = list(re.findall('FINAL SINGLE POINT ENERGY(.*?)-------------------------', input_string, re.DOTALL))
print(len(match_geometry))
print(len(match_energy))
使用 Python 3.6.3 输出:
78
77
使用 Python 2.7.3 输出:
188
188
比较:
$ grep "CARTESIAN COORDINATES (ANGSTROEM)" externalfile | wc -l
> 188
$ grep "FINAL SINGLE POINT ENERGY" externalfile | wc -l
> 188
如果您需要更多信息,请说出来!
【问题讨论】:
-
您是否有显示此行为的示例输入字符串?
-
我认为问题不在于正则表达式。请发帖minimal reproducible example。
标签: python regex python-3.x python-2.7