我想提取字符或字符集之间的组。问题是组中的一些字符也可能在用于提取组的字符集中。下面是我的意思:
我的句子是这样的:text = '[[aaa / bbb (T1=T2)] / [bbb (T1=T2) / bbb (T1>T2)]]'
最后,我希望得到一个列表,如:['aaa', 'bbb (T1=T2)', 'bbb (T1=T2)', 'bbb (T1>T2)']
因此我应该在\[*
、\]*
或\s\/\s
处“剪切”。
我在Python re.findall(r'[\[*|\]*|\s\/\s](.*?)[\[*|\]*|\s\/\s]', text)
中尝试过,但是输出是['', '', 'bbb', '', '', 'bbb', '', 'bbb', '']
。实际上我尝试了很多方法,当然在发布之前我在互联网上搜索了很多。然后,在https://regexr.com/上,我意识到模式\s\/\s
被正确检测到,但是当我添加范围字符[
和]
来执行[\[*|\]*|\s\/\s]
时,所有的单空格都被检测到了,因为这个范围看到了\s
,并且说“好吧,让我们在每个空格处拆分”。这是有道理的,但是我不需要这样拆分我的句子。我试着在\s\/\s
周围添加括号或者圆括号,但是在https://regexr.com/或者Python中,这不起作用。
您是否知道如何在可能的模式中包含 * 表达式 * 的 * 字符集 * 以提取组?
多谢了!
1条答案
按热度按时间hec6srdp1#
如果单个方括号应该是匹配的一部分,那么您可以在一个组中捕获它们之间的内容,然后使用split。
\s+/\s+
匹配1个或多个空白字符之间的正斜杠。\[([^][]*)]
使用取反的字符类匹配[
直到]
的第一次出现,并且在组1中捕获其间的内容。例如
产出
在此regex demo和一个Python demo中查看组1匹配。