Python正则表达式仅在子字符串后跟子字符串时检查该子字符串

2024-04-26 23:10:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把用科学记数法给出的字符串中的所有数字都匹配起来,这是我的程序

import re
txt = '2310163 -204.1154263 -204.1159668 -204.1110188 -204E-9668 200-100'
print re.findall('([+-]?\d+\.?[eE]?[+-]?\d*)', txt)
#                              ^    ^
#                             ex   sg
# allow sg only if its followed by ex

现在200-100不是一个有效的数字,但是regex与之匹配,因为我已经为指数部分给出了一个[+-]。现在,如何使regex只检查[+-],如果它后面紧跟着[eE],比如数字-204E-9668


Tags: 字符串import程序retxt数字科学sg
2条回答

我认为你所期待的是一个积极的前景

(?=foo)

这是一个很好的主题资源:https://www.rexegg.com/regex-lookarounds.html

将整个科学记数法部分放入一个可选组,同时分别匹配可能的小数部分,然后:

[+-]?\d+(?:\.\d+)?(?:[eE][+-]\d+)?
#        ^^^^^^^^^ optional decimals
#                 ^^^^^^^^^^^^^^^^ optional scientific notation

如果希望200-100部分的匹配,因为200正好位于100的旁边,那么在开始时,向后看一个空格或字符串的开头,在结束时,向前看一个空格或字符串的结尾:

(?:(?<=^)|(?<= ))[+-]?\d+(?:\.\d+)?(?:[eE][+-]\d+)?(?= |$)

https://regex101.com/r/SdA295/1

相关问题 更多 >