我在这里看到了问题: 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]
。我怎样才能访问第二场比赛?
答案 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']