regex Python正则表达式提取不同势表达式之间的组

wkyowqbh  于 2023-03-13  发布在  Python
关注(0)|答案(1)|浏览(187)

我想提取字符或字符集之间的组。问题是组中的一些字符也可能在用于提取组的字符集中。下面是我的意思:
我的句子是这样的:
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中,这不起作用。
您是否知道如何在可能的模式中包含 * 表达式 * 的 * 字符集 * 以提取组?
多谢了!

hec6srdp

hec6srdp1#

如果单个方括号应该是匹配的一部分,那么您可以在一个组中捕获它们之间的内容,然后使用split。

  • 拆分模式\s+/\s+匹配1个或多个空白字符之间的正斜杠。
  • 匹配模式\[([^][]*)]使用取反的字符类匹配[直到]的第一次出现,并且在组1中捕获其间的内容。

例如

import re

text = '[[aaa / bbb (T1=T2)] / [bbb (T1=T2) / bbb (T1>T2)]]'
pattern = r"\[([^][]*)]"
res = []

for s in re.findall(pattern, text):
    res += re.split(r"\s+/\s+", s)

print(res)

产出

['aaa', 'bbb (T1=T2)', 'bbb (T1=T2)', 'bbb (T1>T2)']

在此regex demo和一个Python demo中查看组1匹配。

相关问题