用于在字符串中查找集合的 RE 模式

RE Pattern for finding sets in a string

我正在寻找在 re.findall 中使用的最佳模式,以便在我的输入字符串中找到所有 none-空集。 例如:

['{2}', '{5, 65, 75909}', '{26, 90, 4590984}']

输入字符串的理想输出如下:

'kka{2}343{}lds{5, 65, 75909}892,{26, 90, 4590984}'

我已经上网了,但没有找到任何东西;有谁知道什么是最好的模式? 而且,我在模式中使用 (,\s)? 的尝试导致了一个二元组列表,其中仅包含最后一组数和一个空字符串。我如何获得包含空字符串的元组?模式中的哪种东西会导致我得到空字符串?

提前致谢。

此代码可能会对您有所帮助,它会查找每个包含 number[s] 的集合并提取它。

import re

pattern = re.compile("{\d+[, \d]*}")
string = "'kka{2}343{}lds{5, 65, 75909}892,{26, 90, 4590984}'"
print(pattern.findall(string))

结果是['{2}', '{5, 65, 75909}', '{26, 90, 4590984}']

只是为了完整性:这也可以在没有任何模块的情况下完成:

instr = 'kka{2}343{}lds{5, 65, 75909}892,{26, 90, 4590984}'
pos = 0
output = []
while pos < len(instr):
    start, end = pos + instr[pos:].find("{"), pos + instr[pos:].find("}") # find positions of opening and closing bracket in the unprocessed part of the string
    pos = end + 1 # update pos so we don't process only the first couple of brackets each loop
    if start + 1 == end: # opening bracket { is directly before a closing bracket }, that means we have an empty set
        continue
    output.append(instr[start:end + 1])
print(output)