Skip to main content
 首页 » 编程设计

python之从一个大字符串中提取参数值

2025年05月04日37落叶无声

我有以下字符串(从 .txt 文件加载到 Matlab 单元格):

text = 'u1 @ t=0, K=3.1416, gamma=0.1, A=-0.1 u1 @ t=0.01, K=3.1416,  
gamma=0.1, A=-0.1 u1 @ t=0.02, K=3.1416, gamma=0.1, A=-0.1 u1 @ t=0.03,  
K=3.1416, gamma=0.1, A=-0.1' 

整个字符串变量很长(从 t=0 到 t=1 和不同的参数值)。我想将它们分成多个单元格,以便

  • A(1)='u1 @ t=0, K=3.1416, gamma=0.1, A=-0.1',

  • A(2)='u1 @ t=0.01, K=3.1416, gamma=0.1, A=-0.1',

  • 等等

    或者更好的是提取参数t、K、gamma、A 和将它们存储在一个数组中。

如何在 Matlab 中执行此操作? (或在 Python 中)

编辑:

原来我数据中的前几个条目的格式是 ... t=1E-4, ... t=2E-4, ...... t=9E-4, 。 .. t=0.001,一些答案将跳过以科学记数法表示的前几个时间步长。如何处理这些数字?

请您参考如下方法:

您可以使用正则表达式。

获取数字的简单正则表达式是这样的:'-?\d*\.?\d*'。

要获取数据,您可以使用此正则表达式。

'u1 @ t={0}, K={0}, gamma={0}, A={0}'.format('-?\d*\.?\d*') 

例子:

>>> import re 
>>> text = 'u1 @ t=0, K=3.1416, gamma=0.1, A=-0.1 u1 @ t=0.01, K=3.1416, gamma=0.1, A=-0.1 u1 @ t=0.02, K=3.1416, gamma=0.1, A=-0.1 u1 @ t=0.03, K=3.1416, gamma=0.1, A=-0.1' 
>>> r = '-?\d*\.?\d*' 
>>> re.findall('u1 @ t={0}, K={0}, gamma={0}, A={0}'.format(r), text) 
['u1 @ t=0, K=3.1416, gamma=0.1, A=-0.1', 'u1 @ t=0.01, K=3.1416, gamma=0.1, A=-0.1', 'u1 @ t=0.02, K=3.1416, gamma=0.1, A=-0.1', 'u1 @ t=0.03, K=3.1416, gamma=0.1, A=-0.1']