我有一个90%的文本列表,格式是AABBB-CCCDDD001。在这个列表中,也有一些文本可能包括
AABBBICS-CCCDDD001 or
AABBBIGW-CCCDDD001 or
AABBBRTL-CCCDDD001 or
AABBBTDZ-CCCDDD001
这些设备的名称
AA - country code
BBB - site code
CCC - Function code
DDD - Sub Function code.
例如:USNYCRTL-LANDCE001
如果代码ICS、IGW、RTL或TDZ与文本中的匹配,我希望它输出它们各自的编号,为此我创建了一个字典:
ENVIRONMENTCODE = {
'ICS': '1',
'IGW': '2',
'RTL': '3',
'TDZ': '4'
}
NULLCODE = {
'NULL': '9'
}
所以,如果文本是:
AABBBICS-CCCDDD001 it should print '1' or
AABBBIGW-CCCDDD001 it should print '2' or
AABBBRTL-CCCDDD001 it should print '3' or
AABBBTDZ-CCCDDD001 it should print '4'
上面的例子:USNYCRTL-LANDCE001应该打印“3”,因为RTL对应于字典中的数字“3”
现在,对于格式为AABBB-CCCDDD001的90%文本,应该打印“9”,因为它应该与键“NULL”配对。而且,可能很少有文本可以包含AABBBXYZ-CCCDDD001,但是我们需要忽略XYZ,因为它不在字典中,而只考虑字典中的那些。并将该文本标记为“9”。你知道吗
我知道regex可以在这里使用,但我正处于学习python的早期阶段,regex现在似乎对我来说遥不可及。这就是我迄今为止所尝试的:
def environmentcode(self):
idx = self.name.find('-')
if idx > -1:
if self.name in ENVIRONMENTCODE:
return ENVIRONMENTCODE
else:
return NULLCODE
else:
return "Not Found"
它只打印空码字典,而不管文本中是否有键。谁能帮我一下吗。你知道吗
我们可以使用
.find
获取码字(如果存在),然后使用字典将码字映射到它的代码号。我们可以使用dictionary.get
方法返回缺失或未知码字的空代码。如果遇到错误数据,此版本将返回None
:名称不包含'-'
,或者名称在'-'
之前没有8或5个字母。你知道吗输出
下面是一个更简单的版本,它返回空代码,而不是针对坏数据的
None
。你知道吗如果您只是检查在每个测试字符串中是否找到
ENVIRONMENTCODE
的成员,那么就不需要regex。只需使用python关键字in
,例如原始代码的问题在于
test_string in code_dict
它只检查被测字符串和字典中的键之间的精确匹配。你知道吗
我的建议是:
相关问题 更多 >
编程相关推荐