【问题标题】:Python: how to split string by groups Alpha-numeric vs numericPython:如何按组拆分字符串字母数字与数字
【发布时间】:2021-02-12 00:10:57
【问题描述】:

假设我有这样的字符串: "H39_M1", "H3_M15", "H3M19", "H3M11", "D363_H3", "D_128_H17_M50"

如何将它们每一个拆分成一个子字符串列表? 像这样:

["H39", "M1"], "[H3, "Min15"], ["H3","M19"], ["H3","M11"], ["D363","H3"], ["D128","H17","M50"]

然后:交换字母数字组和数字组的位置, 像这样: ["39H", "1M"], "[3H, "15Min"], ["3H","19M"], ["3H","11M"], ["363D","3H"],["128D","17H","50M"]

如您所见,数字组和字母数字组的长度各不相同。 “_”下划线也可以分隔它们。

【问题讨论】:

    标签: python string substring numeric alphanumeric


    【解决方案1】:

    我可能会建议在这里使用re.findallre.sub

    inp = "H3M19"
    inp = re.sub(r'([A-Z]+)([0-9]+)', r'\2\1', inp)
    parts = re.findall(r'[0-9]+[A-Z]+', inp)
    print(parts)
    

    打印出来:

    ['3H', '19M']
    

    第一个re.sub 步骤将H3M19 转换为3H19M,方法是捕获字母和数字对,然后交换它们。然后,我们使用re.findall 查找交换输入中的所有数字/字母对。

    【讨论】:

    • 对其稍作修改:` import re inp = "D1378_Min199_H4999" inp = inp.replace("_","") inp = re.sub(r'([a-zA-Z ]+)([0-9999]+)', r'\2\1', inp) 部分 = re.findall(r'[0-9]+[AZ]+', inp) print(parts)`做这项工作^^
    • @HR_quantile 注意[0-9]+[0-9999]+ 基本上匹配相同的东西。 [0-9]+ 匹配任何由 0 到 9 的一位或多位数字组成的数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多