提取括号内的文本并存储在字典中

时间:2018-05-11 19:30:09

标签: python regex parsing dictionary text-processing

我试图将方括号内的所有函数分开并将它们存储在字典中。但是,输出会从除最后一个输出之外的所有输出中剥离右括号。

import re
line="[f(x,y),g(y,z),f1(x1,y1)]"
matches = re.match(r"(.*)(\[)(.*)(\])(.*)", line)
if matches:
    all_action_labels = matches.group(3)
    sep_action_labels = re.split(r'\),',all_action_labels)
    j=0
    for x in sep_action_labels:
        print(f'Function #{j+1} : {x}')

如您所见,所有输出都缺少结束括号')'除了最后一个:

Function #1 : f(x,y
Function #1 : g(y,z
Function #1 : f1(x1,y1)

我应该使用什么正则表达式?

此外,如何将这些输出存储在字典中?

2 个答案:

答案 0 :(得分:0)

我提取数据的一般规则是使用相当简单的正则表达式调用re.findall()

也许这符合您的需求:

import re
line="[f(x,y),g(y,z),f1(x1,y1)]"
all_action_labels = re.findall(r"\[(.*?)]", line)
for all_action_label in all_action_labels:
    sep_action_labels = re.findall(r"[a-z0-9]+\(.*?\)", all_action_label)
    for j, x in enumerate(sep_action_labels, 1):
        print(f'Function #{j} : {x}')

我使用一个简单的正则表达式从[]中提取数据,另一个用于提取单个函数调用。

答案 1 :(得分:0)

如果您不需要使用正则表达式,则可能更容易执行此操作。这很容易理解,它只是遍历字符串,并将函数字符串放入列表中,并且它跟踪括号,因此具有多个逗号的函数将被处理得很好。

<div id="sortcontainer">
<li class="game" id="45">
    <a class="gamelink" href="link">
      <img class="image" src="games_category_placeholder.jpg">
      <h2 class="title">Some game</h2>
      <h2 class="date" id="2017">(2017)</h2>
      <h3 class="thumbrating">45/100</h3>
    </a>
  </li>
</div>