在Python中用括号中的值去除的优雅方法

时间:2013-12-19 22:59:40

标签: python

Line = "A[0x04] Va   [0xf] 

如何将这些行拆分为包含0x040xf的两个变量?

尝试解决方案:

for line in sys.stdin:
    line.strip("[]").split

4 个答案:

答案 0 :(得分:3)

我会使用re.findall

>>> from re import findall
>>> Line = "A[0x04] Va   [0xf] "
>>> findall("\[([^\]]*)\]", Line)
['0x04', '0xf']
>>> x,y = findall("\[([^\]]*)\]", Line)
>>> x
'0x04'
>>> y
'0xf'
>>>

以下是正则表达式模式的细分:

\[        # [
([^\]]*)  # Capture group to get zero or more characters that are not ]
\]        # ]

答案 1 :(得分:2)

import re
re.findall("\[[^\]]*\]", Line)

答案 2 :(得分:2)

使用列表理解:

>>> Line = "A[0x04] Va   [0xf]"
>>> [x.partition(']')[0] for x in Line.split('[') if ']' in x]
['0x04', '0xf']

答案 3 :(得分:1)

In [36]: %paste
answer = []
take = False
line = "A[0x04] Va   [0xf] "
start = 0
for i,char in enumerate(line):
    if not take:
        if char == '[' :
            take = True
            start = i+1
    else:
        if char == ']':
            take = False
            answer.append(line[start:i])

## -- End pasted text --

In [37]: answer
Out[37]: ['0x04', '0xf']