用于在字符串中查找集合的 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)
我正在寻找在 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)