【发布时间】:2018-09-26 00:46:17
【问题描述】:
在 python 3.6.3 中使用正则表达式我正在尝试提取与特定开始文本和结束文本相关的科学记数法数字。来自以下示例数据:
Not_the_data : REAL[10] (randomtext := doesntapply) := [1.00000000e+000,-2.00000000e000,3.00000000e+000,4.00000000e+000,5.00000000e+000,6.00000000e+000
,7.00000000e+000,8.00000000e-000,9.00000000e+000,1.00000000e+001,1.10000000e+001];
This_data : REAL[2,27] (RADIX := Float) := [3.45982254e-001,9.80374157e-001,8.29904616e-001,1.57800000e+002,4.48320538e-001,6.20533180e+001
,1.80081348e+003,-8.93283653e+000,5.25826037e-001,2.16974407e-001,1.17304848e+002,6.82604387e-002
,3.76116596e-002,6.82604387e-002,3.76116596e-002];
Not_it_either : REAL[72] (randomtext := doesntapply) := [0.00000000e+000,-0.00000000e000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000];
我只想要“This_data”集中的数据:
['3.45982254e-001','9.80374157e-001','8.29904616e001','1.57800000e+002','4.48320538e-001','6.20533180e+001','1.80081348e+003','-8.93283653e+000','5.25826037e-001','2.16974407e-001','1.17304848e+002','6.82604387e-002','3.76116596e-002','6.82604387e-002','3.76116596e-002']
如果我不使用环视功能,我可以像这样轻松获得所有与科学记数法匹配的数字:
values = re.findall('(-?[0-9]+.[0-9]+e[+-][0-9]+)',_DATA_,re.DOTALL|re.MULTILINE)
但只要我添加了一个前瞻功能:
values = re.findall('(?<=This_data).*?(-?[0-9]+.[0-9]+e[+-][0-9]+)+',_DATA_,re.DOTALL|re.MULTILINE)
除所需集合中的第一个数字外,其他所有数字都下降。我已经尝试过多次迭代,使用正面和负面的前瞻和后视在 debugex 上无济于事。
我的源文件是 50k+ 行,所需的数据集是 10-11k 行。理想情况下,我想在一次读取文件时捕获我的数据集。
如何正确使用前瞻或后瞻功能将我的数据捕获限制为符合格式但仅来自所需“This_Data”集的数字?
感谢任何帮助!
【问题讨论】:
标签: python regex python-3.x regex-lookarounds