正则表达式将所有文本放在方括号之外

正则表达式将所有文本放在方括号之外,第1张

正则表达式将所有文本放在方括号之外

如果没有嵌套的括号,则可以执行以下 *** 作:

re.findall(r'(.*?)[.*?]', example_str)

但是,您甚至根本不需要在这里使用正则表达式。只需放在方括号中即可:

(s.split(']')[-1] for s in example_str.split('['))

您尝试失败的唯一原因:

re.findall(r"(.*?)[.*]+", example_str)

…是您在方括号内进行了非贪婪匹配,这意味着它正在捕获从第一个开放式括号到最后一个封闭式括号的所有内容,而不是仅捕获第一对括号。


此外,

+
最后似乎是错误的。如果你有
'abc [def][ghi] jkl[mno]'
,你想回来
['abc ', '', 'jkl']
,还是
['abc ', ' jkl']
?如果是前者,请不要添加
+
。如果是后者,请这样做-
但是您需要将整个方括号模式放在一个非捕获组中:
r'(.*?)(?:[.*?])+


如果最后一个括号后面可能还有其他文本,则该

split
方法可以正常工作,或者您可以使用…
re.split
代替,
re.findall
但是如果您要调整原始正则表达式以使用该方法,则可以。

用英语,您想要的是括号括起来的子字符串之前 字符串末尾的任何(非贪婪的)子字符串,对吗?

因此,您需要在

[.*?]
和之间进行选择
$
。当然,您需要对该分组进行分组以编写替换,并且您不想捕获该分组。所以:

re.findall(r"(.*?)(?:[.*?]|$)", example_str)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5143421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存