Python:按模式拆分字符串

时间:2014-01-29 06:40:30

标签: python regex string split

我的问题是this one的变体。我似乎无法想出这个。

given = "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
expected = ["{abc, xyz}", "123", "{def, lmn, ijk}", "{uvw}", "opq"]

如上例所示,expected中的项目可以是{..., ...},也可以是另一个string

非常感谢提前。

4 个答案:

答案 0 :(得分:3)

我认为以下正则表达式适合这项工作。但是你不必拥有嵌套的花括号(据我所知,嵌套的花括号不能用正则表达式解析)

>>> s= "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
>>> re.findall(r",?\s*(\{.*?\}|[^,]+)",s)
['{abc, xyz}', '123', '{def, lmn, ijk}', '{uvw}', 'opq']

答案 1 :(得分:1)

given = "{abc,{a:b}, xyz} , 123 , {def, lmn, ijk}, {uvw}, opq"
#expected = ["{abc, xyz}", "123", "{def, lmn, ijk}", "{uvw}", "opq"]
tmp_l = given.split(',')
tmp_l = [i.strip() for i in tmp_l]
result_l = []
element = ''
count = 0
for i in tmp_l:
    if i[0] == '{':
        count += 1
    if i[-1] == '}':
        count -= 1
    element = element + i + ','
    if count == 0:
        element = element[0:-1]
        result_l.append(element)
        element = ''

print str(result_l)

这个可以处理嵌套的花括号,虽然看起来不那么优雅..

答案 2 :(得分:0)

以下内容是否无法满足您的需求?

import re
given = "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
expected = re.findall(r'(\w+)', given)

我在终点站跑了然后得到了:

>>> import re
>>> given = "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
>>> expected = re.findall(r'(\w+)', given)
>>> expected
['abc', 'xyz', '123', 'def', 'lmn', 'ijk', 'uvw', 'opq']

答案 3 :(得分:0)

您可以使用以下正则表达式来执行此操作。休息与您提供的类似链接相同。

given = "{abc, xyz}, 123, {def, lmn, ijk}, {uvw}, opq"
regex = r",?\s*(\{.*?\}|[^,]+)"

print re.findall(regex,given)

OP: ['{abc, xyz}', '123', '{def, lmn, ijk}', '{uvw}', 'opq']

只需导入re模块即可。和链接说的一样。 它将匹配大括号{ }内的任何内容和任何字符串。