使用组标签 ?P<> 将正则表达式转换为字典?
我在Python中使用regex模块,而不是默认的re模块。
我想做以下事情:
>>> regex.compile('(?P<heavy>heavily|heavy)').search("My laptop is heavy or heavily").groupdict()
{'heavy': 'heavy'}
我希望它返回:
{'heavy': ['heavy','heavily]}
regex.findall会匹配“heavy”和“heavily”,但是它在使用分组标签时却不奏效。
我必须用regex来解决这个问题,所以不能用逐个字符检查的方法。
1 个回答
2
你有没有看过关于正则表达式的Python文档?
相关内容:
当扫描目标字符串时,用'|'分隔的正则表达式会从左到右依次尝试。当某个模式完全匹配时,就会接受这个分支。这意味着一旦A匹配成功,B就不会再继续测试了,即使B能找到更长的匹配结果。
这就意味着你的正则表达式:
(?P<heavy>heavily|heavy)
会找到第一个匹配的字符串,也就是“heavy”,并把这个字符串保存下来。然后它会说:“恭喜,我完成了!”并结束扫描。
你需要一个能同时捕获两个字符串的正则表达式。它会把这个字符串heavy
保存到一个组里(正如你的正则表达式所要求的),这个组也叫heavy
。然后你的组字典命令会返回这个信息。所以你有一个名为heavy
的组,里面有一个正则匹配结果,也是heavy
,这就给你返回了
{"heavy": "heavy"}
要解决你的问题,有两种方法。
使用正则表达式的findall方法,它会返回一个列表,然后你可以把这个列表转成字典。这是更简单的方式。
设计一个能找到两个词并把它们放在同一个组里的正则表达式。虽然可以做到,但这会非常复杂。
如果你想搜索多个匹配,我强烈建议你使用findall方法。