【发布时间】:2020-07-06 15:54:08
【问题描述】:
我有一个字母数字参考 ID 列表。它们有 3 位数字,左边补零,后跟一个字母,再后面跟 3 位数字,同样,左边补零。
例如。
original_ref_list = ["005a004",
"018b003",
"007a029",
"105a015"]
如您所见,两组数字都用零填充。我想获得相同的引用,但字母两侧没有零填充,但不删除所有零。
例如。
fixed_ref_list = ["5a4",
"18b3",
"7a29",
"105a15"]
我可以通过搜索三个正则表达式模式、组合结果并将其附加到列表中来做到这一点:
fixed_ref_list = list()
for i in original_ref_list:
first_refpat = re.compile(r'[1-9]\d*[a-z]\d+')
first_refpatiter = first_refpat.finditer(gloss[2])
for first_ref_find in first_refpatiter:
first_ref = first_ref_find.group()
second_refpat = re.compile(r'[a-z]\d+')
second_refpatiter = second_refpat.finditer(first_ref)
for second_ref_find in second_refpatiter:
second_ref = second_ref_find.group()[1:]
third_refpat = re.compile(r'[1-9]\d*')
third_refpatiter = third_refpat.finditer(second_ref)
for third_ref_find in third_refpatiter:
third_ref = third_ref_find.group()
fixed_ref_list.append(first_ref[:-len(second_ref)] + third_ref)
但这似乎是一个尴尬的解决方案。是否有一种内置方法可以仅返回正则表达式模式的一部分,或者在返回结果之前删除填充?或者,有什么方法可以做我想做的不那么混乱的事情吗?
【问题讨论】:
-
你的字符串中总是有两位数吗?例如
005a和004,或者018b和003? -
并非总是如此,为了提出问题,我已经将问题归结为问题。我可以排除不采用这种格式的引用类型并区别对待它们。
-
是的,请将它们与预期输出一起添加到问题中。
-
它们不是必需的。我只想知道如何清理处理这种类型的代码部分。下面的两个答案效果很好。
标签: python regex zero-padding