Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式捕获方括号内的文本_Python_Regex - Fatal编程技术网

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

Python 使用正则表达式捕获方括号内的文本,python,regex,Python,Regex,我在这里看到了一个问题: 这和我想要的差不多,但我不能让它工作 我的数据是: [Honda]日本制造商[VTEC]电子升降控制装置名称 我希望输出是 [Honda],[VTEC] 我的表达是: m = re.match('(\[[^\[\]]*\])', '[Honda] Japanese manufacturer [VTEC] Name of electronic lift control') 我希望: m.group(0)输出[Honda] m.group(1)输出[VTEC] 但

我在这里看到了一个问题: 这和我想要的差不多,但我不能让它工作

我的数据是:

[Honda]日本制造商[VTEC]电子升降控制装置名称
我希望输出是

[Honda],[VTEC]
我的表达是:

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

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

但是,这两种输出都
[Honda]
。如何访问第二个匹配项?

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

m = re.findall('\[[^\[\]]*\]', '[Honda] Japanese manufacturer [VTEC] Name of electronic lift control')
提供
['[Honda]','[VTEC]']
,以便您可以使用以下各项获得:

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

print(m[1])
# => [VTEC]
表达式中只有一个组,因此只能得到该组。组1为捕获组,组0为全部匹配文本;在你的表达中,它们是一样的。如果省略了
(…)
括号,您将只有一个组0

如果要获得所有匹配项,请使用。这将返回匹配组的列表(如果表达式中没有捕获组,则返回组0):


如果您考虑的不是re:

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']
['Honda', 'VTEC']