Python如何强制一个字符串匹配另一个字符串的格式
发布时间:2020-12-20 11:28:48 所属栏目:Python 来源:网络整理
导读:我有一些我为Assessor办公室编写的 Python脚本.其中大多数要求输入包裹ID号(然后用于通过odbc获取某些数据).他们对如何输入包裹ID并不十分一致. 所以这是我的问题,他们以3种方式之一输入包裹ID: 1:’1005191000060′ 2:’001005191000060′ 3:’0010-05-
我有一些我为Assessor办公室编写的
Python脚本.其中大多数要求输入包裹ID号(然后用于通过odbc获取某些数据).他们对如何输入包裹ID并不十分一致.
所以这是我的问题,他们以3种方式之一输入包裹ID: 1:’1005191000060′ 2:’001005191000060′ 3:’0010-05-19-100-006-0′ 第三种方式是正确的方法,所以我需要确保输入被修复为始终匹配该格式.当然,他们宁愿输入ID中的前两种方式之一.包裹号码必须始终为15位数(20个带短划线) 我目前有一个关于如何修复包裹ID的工作方法,但它非常难看.我想知道是否有人知道更好的方式(或更多的“Pythonic”方式).我有一个通常导入到所有这些脚本的函数.这是我有的: import re def FormatPID(in_pid): pid_format = re.compile('d{4}-d{2}-d{2}-d{3}-d{3}-d{1}') pid = in_pid.zfill(15) if not pid_format.match(pid): fixed_pid = '-'.join([pid[:4],pid[4:6],pid[6:8],pid[8:11],pid[11:-1],pid[-1]]) return fixed_pid else: return pid if __name__ == '__main__': pid = '1005191000060' ## pid = '001005191000060' ## pid = '0010-05-19-100-006-0' # test t = FormatPID(pid) print t 这确实工作得很好,但我已经被这个丑陋的代码困扰了一段时间,我认为必须有一个比切片更好的方法.我希望有一种方法可以“强制”将其转换为字符串以匹配“pid_format”变量.有任何想法吗?我在正则表达式模块中找不到任何要做的事情 解决方法
您可以使用itertools.islice而不是手动切片:
import re from itertools import islice groups = (4,2,3,1) def FormatPID(in_pid): pid_format = re.compile('d{4}-d{2}-d{2}-d{3}-d{3}-d{1}') in_pid = in_pid.zfill(15) if not pid_format.match(in_pid): it = iter(in_pid) return '-'.join(''.join(islice(it,i)) for i in groups) return in_pid print FormatPID('1005191000060') print FormatPID('001005191000060') print FormatPID('0010-05-19-100-006-0') 输出: 0010-05-19-100-006-0 0010-05-19-100-006-0 0010-05-19-100-006-0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容