首页 > 解决方案 > 在python中读取字符串

问题描述

我正在使用python尝试将信息与这种类型的字符串分开:

r = "(-0.04530261550379927+0j) [X0 X1 Y2 Y3]"

最终我需要的信息是括号中的数字,并将字母与数组中的数字分开。所以在上面的例子中,我想得到的结果是: number -0.04530261550379927,一个 array:[X, X, Y, Y]和另一个 array: [0, 1, 2, 3]

我一直在尝试,re.match但由于这是我第一次使用这个模块,我觉得它很混乱。

将不胜感激任何帮助。

标签: pythonstringmatchre

解决方案


你可以这样做:

import re

r = "(-0.04530261550379927+0j) [X0 X1 Y2 Y3]"
match = re.match(r"\(([-+]?\d+(?:\.\d+)?)\+\d+j\) \[((?:[XYZ]\d(?: [XYZ]\d)*)?)]", r)
number, array = match.groups()

number = float(number)
a1, a2 = [], []
for i in array.split():
    a1.append(i[0])
    a2.append(int(i[1]))

print(number, a1, a2)

解释:

正则表达式模式r"\(([-+]?\d+(?:\.\d+)?)\+\d+j\) \[((?:[XYZ]\d(?: [XYZ]\d)*)?)]"匹配给定的字符串:

  • 部分([-+]?\d+(?:\.\d+)?)匹配编号
  • 部分((?:[XYZ]\d(?: [XYZ]\d)*)?)匹配数组
  • 有非捕获组定义为(?:<match>)

match.groups()返回所有捕获组的列表(在我们的例子中为 2 个),我们将列表解压缩为 variables numberarray

接下来,我们将存储在array空间中的字符串拆分并遍历项目:

  • 第一个字符附加到a1
  • 第二个字符转换为 int 并附加到a2

输出:

-0.04530261550379927 ['X', 'X', 'Y', 'Y'] [0, 1, 2, 3]

推荐阅读