使用正则表达式捕获方括号内的文本

时间:2014-06-20 15:21:22

标签: python regex

我在这里看到了问题: Regex to capture {} 这与我想要的类似,但我无法让它发挥作用。

我的数据是:

[Honda] Japanese manufacturer [VTEC] Name of electronic lift control

我希望输出

[Honda], [VTEC]

我的表达是:

m = re.match('(\[[^\[\]]*\])', '[Honda] Japanese manufacturer [VTEC] Name of electronic lift control')

我希望:

  • m.group(0)输出[Honda]
  • m.group(1)输出[VTEC]

但是输出[Honda]。我怎样才能访问第二场比赛?

3 个答案:

答案 0 :(得分:3)

您的表达式中只有一个组,因此您只能获得该组。第1组是捕获组,第0组是整个匹配的文本;在你的表达中,他们是同一个。如果你省略了(...)个括号,那么你只有一个0组。

如果您想所有匹配,请使用re.findall()。这将返回匹配组列表(如果表达式中没有捕获组,则返回组0):

>>> import re
>>> re.findall('\[[^\[\]]*\]', '[Honda] Japanese manufacturer [VTEC] Name of electronic lift control')
['[Honda]', '[VTEC]']

答案 1 :(得分:2)

您可以使用re.findall获取所有匹配项,但是您可以将它们列入列表中,并且您不需要捕获组:

m = re.findall('\[[^\[\]]*\]', '[Honda] Japanese manufacturer [VTEC] Name of electronic lift control')

给予['[Honda]', '[VTEC]']以便您可以获得每个人:

print(m[0])
# => [Honda]

print(m[1])
# => [VTEC]

答案 2 :(得分:0)

如果你考虑的不是重新:

s="[Honda] Japanese manufacturer [VTEC] Name of electronic lift control"
result = []
tempStr = ""
flag = False
for i in s:
    if i == '[':
        flag = True
    elif i == ']':
        flag = False
    elif flag:
        tempStr = tempStr + i
    elif tempStr != "":
        result.append(tempStr)
        tempStr = ""

print result

输出:

['Honda', 'VTEC']