搜索具有特殊字符的多个子字符串作为标记[重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

我有一个字符串:

myStr = "abcd123[ 45][12] cd [67]"

我想获取'['和']'标记之间的所有子字符串。我使用findall获取相同的内容,但我得到的是firsr'['和']'最后一个字符之间的所有内容。

print re.findall('\[(.+)\]', myStr)

我在这做什么错?

python regex
2个回答
3
投票

这可能会被标记为重复,但这里的简单修复就是让你的点变得懒惰:

print re.findall('\[(.+?)\]', myStr)

[' 45', '12', '67']

在这里.+?意味着消耗所有东西,直到击中第一个或最近的方括号。您当前的模式正在消耗所有内容,直到最后一个结束方括号。

另一个逻辑相同的模式也可以使用\[([^\]+)\]

print re.findall('\[([^\]]+)\]', myStr)

1
投票

.+是贪婪的,并尽可能选择,包括其他[]字符。

你有两个选择:使用.+?使选择器非贪婪,[]选择可能的字符数最少,或者使用[^\[\]]+而不是.+从你的匹配中明确排除qazxswpoi。

(在这种情况下,这两个选项大致相同。虽然如果结束分隔符是较长的字符串而不是单个字符,则“非贪婪”选项更可取,因为较长的字符串更难以排除。)

© www.soinside.com 2019 - 2024. All rights reserved.