代码之家  ›  专栏  ›  技术社区  ›  Marcel Alexandru

Python:根据位置、括号和圆括号从列表中获取每个元素

  •  0
  • Marcel Alexandru  · 技术社区  · 7 年前

    所以我有下一个清单:

    a = ["[Test](Link)", "[Test2](link2)", "[test3](link3)"]
    

    我想让它以这种方式表现出来:

    b1 = Test
    b2 = Link
    b3 = test3
    b4 = link2
    b5 = test3
    b6 = link3
    

    我怎么能做这样的事?

    我试着加入名单,用re来得到我想要的,但是我失败了

    4 回复  |  直到 7 年前
        1
  •  0
  •   Sunitha    7 年前
    >>> a = ["[Test](Link)", "[Test2](link2)", "[test3](link3)"]
    >>> b1,b2,b3,b4,b5,b6 = (y.strip('[]()') for x in a for y in x.split(']'))
    >>> print (b1,b2,b3,b4,b5,b6)
    Test Link Test2 link2 test3 link3
    
        2
  •  1
  •   nosklo    7 年前
    import re
    a = ["[Test](Link)", "[Test2](link2)", "[test3](link3)"]
    for s in a:
        m = re.match('(\[.*\])(\(.*\))$', s)
        print(m.group(1))
        print(m.group(2))
    

    结果:

    [Test]
    (Link)
    [Test2]
    (link2)
    [test3]
    (link3)
    
        3
  •  1
  •   user3483203    7 年前

    你可以用 re.findall 使用后 join 在你的名单上:

    >>> re.findall(r'(\[.*?\]|\(.*?\))', ''.join(a))
    ['[Test]', '(Link)', '[Test2]', '(link2)', '[test3]', '(link3)']
    

    正则表达式解释:

    (                       # Matching group 1
        \[.*?\]             # Matches non-greedily in between brackets
        |                   # OR
        \(.*?\)             # Matches non-greedily between parenthesis
    )                       # End of matching group
    
        4
  •  0
  •   W Stokvis    7 年前

    最初的问题看起来是希望每个值都由一个新变量表示。你可以用 globals() 动态创建新变量。

    count = 0
    g = globals()
    for i in a:
         f = i.strip('[)').split('](')
         count += 1
         g['b' +  str(count)] = f[0]
         print ('b' + str(count) + ' = ' + f[0])
         count += 1
         g['b' + str(count)] = f[1]
         print ('b' + str(count) + ' = ' + f[1])
    
    
    b1 = Test
    b2 = Link
    b3 = Test2
    b4 = link2
    b5 = test3
    b6 = link3
    

    下面是动态创建的变量的输出。

    In [5]: b1
    Out[5]: 'Test'
    
    In [6]: b2
    Out[6]: 'Link'
    
    In [7]: b3
    Out[7]: 'Test2'
    
    In [8]: b4
    Out[8]: 'link2'
    
    In [9]: b5
    Out[9]: 'test3'
    
    In [10]: b6
    Out[10]: 'link3'