python - 多次匹配某些捕获组
问题描述
我对 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]*\")
我知道这只匹配到名称,我想知道如何在名称之后获取键值对?提前致谢!
解决方案
除非您先捕获标签,否则唯一的方法是生成一种类型的捕获组,然后重复它:
(?:^\@(?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"'}]
推荐阅读
- android-studio-2.3 - 从 android studio 在现有的 excel 文件中写入数据
- vb.net - Visual Basic:如何在遍历 DataTable 行时删除特定列?
- batch-file - 批处理无法识别现有变量?
- javascript - 如何将 ELSE 添加到 IF 语句以追加
- c# - C# 按键查找 JWT 声明
- asp.net - 当我在调试时打开它时,我的 asp.net MVC 程序看起来不正确
- windows - WindowsPE - 如何运行电子应用程序,缺少 dll
- r - R:对应于 15 年的 12 个月的数据时间序列的条形图
- kotlin - CardStackView 空
- java - JavaFX - 需要通过初始化预填充字段,但不允许出现异常。有什么办法吗?