首页 > 解决方案 > 多次匹配某些捕获组

问题描述

我对 Python 中的正则表达式有疑问。我有以下格式的输入字符串:

@Team1 name="John Black" hobby="reading" job="software engineer"

我想用正则表达式提取团队、姓名、爱好和工作。预期输出:

Team:
Team1

name:
John Black

hobby:
reading

job:
software engineer

我想出了这个正则表达式:

(?P<tags>(?<=\@)\w*) (?P<k>\w*)=(?P<v>\"[\w\s]*\")

我知道这只匹配到名称,我想知道如何在名称之后获取键值对?提前致谢!

标签: pythonregex

解决方案


除非您先捕获标签,否则唯一的方法是生成一种类型的捕获组,然后重复它:

(?:^\@(?P<tag>\w*) )?(?:(?:(?P<k>\w+)=(?P<v>\"[\w\s]+\"))+)(?:\@$)?

在这里检查结果

pattern=r"(?:^\@(?P<tag>\w*) )?(?:(?:(?P<k>\w+)=(?P<v>\"[\w\s]+\"))+)(?:\@$)?"
strp='@Team1 name="John Black" hobby="reading" job="software engineer"@'
r = re.compile(pattern)
res=[m.groupdict() for m in r.finditer(strp)]

资源:

[{'tag': 'Team1', 'k': 'name', 'v': '"John Black"'},
 {'tag': None, 'k': 'hobby', 'v': '"reading"'},
 {'tag': None, 'k': 'job', 'v': '"software engineer"'}]

推荐阅读