Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从正则表达式命令获取数学表达式的特定元素_Python_Regex - Fatal编程技术网

Python 从正则表达式命令获取数学表达式的特定元素

Python 从正则表达式命令获取数学表达式的特定元素,python,regex,Python,Regex,我想得到数学表达式中的一些模式 这些模式的形式是:“1.e10”或“1.e7”(其中1.e代表10^blabla) 我不仅想识别这些模式,还想让我的算法返回数字(这里是10或7) 所以我试过这个: pattern = re.compile("1.e(\d)*") pattern.search(my expression) 但我不知道如何得到这些数字 有什么帮助吗 提前谢谢你像这样的regx "1\.e(\d*)" 假设要提取指数符号的指数,请尝试以下操

我想得到数学表达式中的一些模式

这些模式的形式是:“1.e10”或“1.e7”(其中1.e代表10^blabla) 我不仅想识别这些模式,还想让我的算法返回数字(这里是10或7)

所以我试过这个:

pattern = re.compile("1.e(\d)*")
pattern.search(my expression)
但我不知道如何得到这些数字

有什么帮助吗

提前谢谢你

像这样的regx

"1\.e(\d*)"

假设要提取指数符号的指数,请尝试以下操作:

import re

l = ['1.e10', '1.e7', '2.0E+8', '3.58e-5']   # example inputs

for i in l:
    m = re.search(r'\d\.\d*[eE]([+-]?\d+)', i)
    print(m.group(1))                        # print the exponent
输出:

10
7
+8
-5
使用

(?P-?\d+(?:\。\d*))(?:[eE](?P[+-]?\d+))?

解释

--------------------------------------------------------------------------------
(组和捕获到\1:
--------------------------------------------------------------------------------
-?“-”(可选(匹配最大金额)
(可能的)
--------------------------------------------------------------------------------
\d+数字(0-9)(1次或多次(匹配
尽可能多的钱)
--------------------------------------------------------------------------------
(?:组,但不捕获(可选)
(匹配尽可能多的金额):
--------------------------------------------------------------------------------
\.                       '.'
--------------------------------------------------------------------------------
\d*数字(0-9)(0或更多次
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
)?分组结束
--------------------------------------------------------------------------------
)结束\1
--------------------------------------------------------------------------------
(?:组,但不捕获(可选)
(匹配尽可能多的金额):
--------------------------------------------------------------------------------
[eE]任何字符:“e”,“e”
--------------------------------------------------------------------------------
(分组并捕获到\2:
--------------------------------------------------------------------------------
[+-]?以下任意字符:'+','-'(可选)
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
\d+数字(0-9)(1次或多次
(匹配尽可能多的金额)
--------------------------------------------------------------------------------
)结束\2
--------------------------------------------------------------------------------
)?                       分组结束
见:

重新导入
测试压力='1.e10,1.e7,2.0E+8,3.58e-5'
matches=re.finditer(r'(?P-?\d+(?:\。\d*))(?:[eE](?P[+-]?\d+))),,test\u str)
打印([m.groupdict()用于匹配中的m])

结果
[{'main':'1','exponent':'10'},{'main':'1','exponent':'7'},{'main':'2.0','exponent':'+8'},{'main':'3.58','exponent':'-5'}
而这段代码可以回答这个问题,提供关于如何和/或为什么解决这个问题的额外上下文,可以提高答案的长期价值。