Python:拆分包含括号和|的复杂字符串

时间:2013-04-08 13:03:22

标签: python regex string parsing

在测试文件中,我有

形式的记录
DATA(VALUE1|VALUE2||VALUE4)

等等。

我想把这个字符串分成两个句子,第一个产生“DATA”,第二个给我括号里面的内容,分成“|”。第二部分看起来微不足道,但到目前为止,我在第一部分的尝试都是丑陋的。

我更倾向于使用正则表达而不是解析,因为最终线条非常简单。

3 个答案:

答案 0 :(得分:5)

另一个建议:

>>> s = "DATA(VALUE1|VALUE2||VALUE4)"
>>> import re
>>> matches = re.findall("[^()]+", s)
>>> matches
['DATA', 'VALUE1|VALUE2||VALUE4']
>>> result = {matches[0]: matches[1].split("|")}
>>> result
{'DATA': ['VALUE1', 'VALUE2', '', 'VALUE4']}

答案 1 :(得分:3)

您可以使用re.split一次性传递:

In [10]: import re

In [11]: line = 'DATA(VALUE1|VALUE2||VALUE4)'

In [12]: re.split(r'[(|)]', line)
Out[12]: ['DATA', 'VALUE1', 'VALUE2', '', 'VALUE4', '']

并提取如下数据和值:

In [13]: parts = re.split(r'[(|)]', line)

In [14]: data = parts[0]

In [15]: values = parts[1:-1]

In [16]: values
Out[16]: ['VALUE1', 'VALUE2', '', 'VALUE4']

答案 2 :(得分:1)

import re
s = 'DATA(VALUE1|VALUE2|VALUE4)'

然后

re.search(r"(.*)\((.*)\)", s).group(2).split("|")

给你

['VALUE1', 'VALUE2', 'VALUE4']

re.search(r"(.*)\((.*)\)", s).group(1)

给你

'DATA'