首页 > 解决方案 > 正则表达式来识别包括方括号的文本

问题描述

我有一个示例字符串 - x = "something [TextA][TextB]",带有以下 re 命令-

re.search('\[(.*)\]',x).groups() 

我能够实现结果为 - “[TextA][TextB]”,但我正在寻找作为列表的结果 - [“[TextA]”,“[TextB]”]

标签: pythonregex

解决方案


我能够取得成果 - “[TextA][TextB]”

因为.*贪心的,所以第一个匹配跳过第一个]封闭TextA并继续到第二个封闭TextB

用于.*?非贪婪匹配。您并不严格需要此工具;您可以改为匹配“任意数量的非字符]”,例如[^\]]*. 但我认为.*?要容易得多,而且概括得更好。

但我正在寻找结果作为列表

如果您需要获得特定数量的匹配项,那么您可以在您的正则表达式中明确指定每个匹配项,并为每个匹配项进行适当的捕获。如果您需要任意数量的匹配项,请使用findall而不是search

>>> re.findall('\[(.*?)\]', 'foo[bar][baz]')
['bar', 'baz']

推荐阅读