当前位置: 首页 > 面试题库 >

re.findall返回命名捕获组的字典?

公西毅
2023-03-14
问题内容

受到一个现已删除的问题的启发;给定带有命名组的正则表达式,是否有类似的方法findall返回dict具有命名捕获组的列表而不是列表tuple

鉴于:

>>> import re
>>> text = "bob sue jon richard harry"
>>> pat = re.compile('(?P<name>[a-z]+)\s+(?P<name2>[a-z]+)')
>>> pat.findall(text)
[('bob', 'sue'), ('jon', 'richard')]

应该改为:

[{'name': 'bob', 'name2': 'sue'}, {'name': 'jon', 'name2': 'richard'}]

问题答案:
>>> import re
>>> s = "bob sue jon richard harry"
>>> r = re.compile('(?P<name>[a-z]+)\s+(?P<name2>[a-z]+)')
>>> [m.groupdict() for m in r.finditer(s)]
[{'name2': 'sue', 'name': 'bob'}, {'name2': 'richard', 'name': 'jon'}]


 类似资料:
  • 无捕获组和命名组 精心设计的 REs 也许会用很多组,既可以捕获感兴趣的子串,又可以分组和结构化 RE 本身。在复杂的 REs 里,追踪组号变得困难。有两个功能可以对这个问题有所帮助。它们也都使用正则表达式扩展的通用语法,因此我们来看看第一个。 Perl 5 对标准正则表达式增加了几个附加功能,Python 的 re 模块也支持其中的大部分。选择一个新的单按键元字符或一个以 "\" 开始的特殊序列

  • 这不是重复的...在我看来。我不是在问它的有用性。如果可以的话,我要求澄清定义。不要投反对票,请解释一下。如果我认为这篇文章对其他读者来说很愚蠢,我会删除它。 其中显示是这样的 如果后面是什么?:应为“普通括号的非捕获版本”。匹配括号内的任何正则表达式,但在执行匹配或稍后在模式中引用后,无法检索组匹配的子字符串。” 为什么它仍然返回字符串“animal=”? (Python 3.6.3)f是:

  • 本文向大家介绍Regular Expressions 命名捕获组的外观,包括了Regular Expressions 命名捕获组的外观的使用技巧和注意事项,需要的朋友参考一下 示例 根据口味,命名的捕获组可能如下所示: 随着X成为您想要捕获的模式。让我们考虑以下字符串: 从前有一个漂亮的小女孩... 曾几何时,有一个戴着帽子的独角兽... 曾几何时,有一艘带有海盗旗的船... 我要在其中捕获每行的

  • 我想要能够让我的catch请求用户输入文件名,直到文件名有效为止,有没有人能给我一个建议,如何安排我的代码做到这一点? 导入java.io.FileNotFoundException;导入java.util.scanner; public class Requierment2{public static void main(String[]args){ }

  • 问题内容: 这仅返回结果,我需要返回全部89%。有任何想法如何做吗? 问题答案: 简单的解决方案: 更漂亮的解决方案: 最漂亮的解决方案:

  • 问题内容: 我有一个包含一堆字符串的文件,例如“ size = XXX;”。我第一次尝试使用python的re模块,并且对以下行为感到有些困惑:如果我在正则表达式中使用管道作为“或”,我只会看到返回的匹配项。例如: 匹配的“大小=”部分不见了。(但是,肯定会在搜索中使用它,否则将会有更多结果)。我究竟做错了什么? 问题答案: 您遇到的问题是,如果尝试匹配的正则表达式捕获组(即,括号中包含的正则表达