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

时间:2018-07-18 20:03:43

标签: python

所以我有下一个列表:

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

我想以这种方式显示它:

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

我该怎么做?

我尝试加入列表并使用re获得我想要的东西,但失败了

4 个答案:

答案 0 :(得分:1)

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)

答案 1 :(得分:1)

在列表上使用 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

答案 2 :(得分:0)

您的原始问题看起来像您希望每个值都由一个新变量表示。您可以使用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'

答案 3 :(得分:0)

>>> 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