如何在 python 中多次解析

How to parse multiple times in python

我正在尝试解析从 txt 文件中读取的字符串。 该行是:

(0 ,3) :5.0|(1 ,3) : -5.0

我需要先得到 (0,3) 然后是 5,用 "|" 分割后我需要得到 (1,3) 和 -5

最后, 我应该有 2 个单独保存值的列表变量。 第一个列表应该有:(0,3)和(1,3) 第二个列表应该包含:5,-5

我尝试了什么:

goal_states, their_reward = lines[5].split("|"), lines[5].rsplit(':', 1)

我得到的是:['(0,3):5.0|(1,3)', '-5.0']

提前致谢

P.S: 我不应该使用任何导入语句。

您可以将竖线转换为逗号,然后将其格式化为字典并使用 ast 的 literal_eval 为自己提供字典以供使用

  import ast
  s = "(0 ,3) :5.0|(1 ,3) : -5.0"
  s = s.replace("|", ",")
  ast.literal_eval(f"{{{s}}}")
{(0, 3): 5.0, (1, 3): -5.0}

我已经解决了这个执行多重拆分操作的问题。

goal_states=[]
their_obstacles=[]
for i in "(0 ,3) :5.0|(1 ,3) : -5.0".split("|"):
   goal_states.append(i.split(":")[0])
   their_obstacles.append(i.split(":")[1])

literal_eval @Sayse 使用的方法当然是最直接的方法。但是如果你想做一些解析,你可以这样做:

txt = "(0 ,3) :5.0|(1 ,3) : -5.0"
txt = txt.replace(" ", "")

goal_states = []
their_rewards = []
for i in txt.split('|'):  # ['(0,3):5.0', '(1,3):-5.0']
    a, b = i.split(':')
    _, n1, _, n2, _ = a    # `a` is something like '(0,3)'

    n1 = int(n1)
    n2 = int(n2)

    goal_states.append((n1, n2))
    their_rewards.append(int(float(b)))

print(goal_states)
print(their_rewards)

输出:

[(0, 3), (1, 3)]
[5, -5]

这可以通过列表理解来实现:

例如:

string = "(0, 3): 5.0|(1 ,3) : -5-0"
parsed_list1, parsed_list2 = [i.split(":") for i in string.split("|")]

print(parsed_list1)
print(parsed_list2)

输出:

['(0, 3)', '5.0']

['(1 ,3)', '-5-0']

希望这就是你想要的。

s = "(0 ,3) :5.0|(1 ,3) : -5.0"

def get_result(s: str) -> tuple:
    goals = []
    rewards = []
    
    for pair in s.split("|"):
        goal, reward = pair.split(":")

        goals.append(eval(goal.strip()))
        rewards.append(float(reward.strip()))

    return (goals, rewards)

print(get_result(s))