Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式对列表中的字符串进行分组_Python_Regex_Python 3.x_Grouping - Fatal编程技术网

Python 使用正则表达式对列表中的字符串进行分组

Python 使用正则表达式对列表中的字符串进行分组,python,regex,python-3.x,grouping,Python,Regex,Python 3.x,Grouping,我正在尝试使用正则表达式根据相似性对项目进行分组,因此,我可以将项目分组为更少的项目,而不是有很多项目。但它并没有像预期的那样工作,并且给出了错误的输出。下面是预期输出和我的当前输出 小示例:'k1',k2',k3',k4'->'k(1 | 2 | 3 | 4) 实际代码: import re loc_list = [ 'phone100-500-cas-ras9-f51-s10-k2', 'phone100-500-cas-ras9-f52-s10-k2', 'pho

我正在尝试使用正则表达式根据相似性对项目进行分组,因此,我可以将项目分组为更少的项目,而不是有很多项目。但它并没有像预期的那样工作,并且给出了错误的输出。下面是预期输出和我的当前输出

小示例:
'k1',k2',k3',k4'
->
'k(1 | 2 | 3 | 4)

实际代码:

import re

loc_list = [
    'phone100-500-cas-ras9-f51-s10-k2',
    'phone100-500-cas-ras9-f52-s10-k2',
    'phone100-500-cas-ras9-f50-s10-k2',
    'phone100-500-cas-ras9-f50-s9-k3',
    'phone100-500-cas-ras9-f50-s9-k1',
    'Telephone100-500-cas-ras9-f50-s9-k2']

split_loc_list = [phone.split("-") for phone in loc_list]

locs = {}

for loc in split_loc_list:
    locs.setdefault("-".join(loc[0:4]), {}).\
                        setdefault("f", set()).add(loc[4].strip("f"))
    locs.setdefault("-".join(loc[0:4]), {}).\
                        setdefault("s", set()).add(loc[5].strip("s"))
    locs.setdefault("-".join(loc[0:4]), {}).\
                        setdefault("k", set()).add(loc[6].strip("k"))
prove = []
for loc, vals in locs.items():
    f_vals_sorted = sorted(list(map(int, vals["f"])))
    f_vals_joined = "|".join(map(str, f_vals_sorted))
    if "|" in f_vals_joined:
        f_vals_joined = f"({f_vals_joined})"
    s_vals_sorted = sorted(list(map(int, vals["s"])))
    s_vals_joined = "|".join(map(str, s_vals_sorted))
    if "|" in s_vals_joined:
        s_vals_joined = f"({s_vals_joined})"
    k_vals_sorted = sorted(list(map(int, vals["k"])))
    k_vals_joined = "|".join(map(str, k_vals_sorted))
    if "|" in k_vals_joined:
        k_vals_joined = f"({k_vals_joined})"
    prove.append(f"{loc}-f{f_vals_joined}-s{s_vals_joined}-k{k_vals_joined}")
print("|".join(prove))
错误的电流输出:

phone100-500-cas-ras9-f(50|51|52)-s(9|10)-k(1|2|3)|Telephone100-500-cas-ras9-f50-s9-k2
预期产出:

Telephone100-500-cas-ras9-f50-s9-k2|phone100-500-cas-ras9-f50-s9-k(1|3)|phone100-500-cas-ras9-f(50|51|52)-s10-k2

谢谢,我已经编辑了postGreat,这澄清了很多。我也对它进行了编辑,使它更清晰。希望能有帮助。如果我做错了什么,我会问的。不应该是
…f50-s10-k2 |…f(51 | 52)-s10-k2
…f(50 | 51 | 52)-s10-k2
?谢谢,是的,我已经更新了它。你在尝试构建一种正则表达式吗?谢谢,我编辑了postGreat,这澄清了很多。我也对它进行了编辑,使它更清晰。希望能有帮助。如果我做错了什么,我会问的。不应该是
…f50-s10-k2 |…f(51 | 52)-s10-k2
…f(50 | 51 | 52)-s10-k2
?谢谢,是的,我已经更新了它。你想建立一种正则表达式吗?