2017-06-01 74 views
0

我有产品名称,我必须找到型号。例如将正则表达式与无序的字母和数字字符串匹配

KIPOR KDE38SS3 DIESEL 400V AGGREGAATTI # Result --> KDE38SS3 
KIPOR KDE28SS3 DIESEL 400V AGGREGAATTI # Result --> KDE28SS3 
KIPOR KDE19STA3  19 KW GENERAATTORI 400V # Result --> KDE19STA3   
KRÄNZLE C895-1 KUUMAVESIPESURI KELALLA # Result --> C895-1 
KRÄNZLE 1165-1 KUUMAVESIPESURI KELALLA # Result --> 1165-1 
NILFISK MH 4M-200/960 FA KUUMAVESIPESURI # Result --> MH 4M-200/960 FA 
WALLIUS LMP-452i MIG HITSAUSKONE # Result --> LMP-452i 
KRÄNZLE C15/150 KUUMAVESIPESURI KELALLA # Result --> C15/150 

我当前的代码很简单,工作在某些情况下,但我想获得一个有效的方法。

for i in range (10): 
    modelnum = re.findall(r'\w+\d+\w+', productnames[i]) 
    print(modelnum) 

结果:

['KDE38SS3', '400V'] 
['KDE28SS3', '400V'] 
['KDE19STA3Â', '400V'] 
['C895'] 
['1165'] 
['200', '960'] 
['452i'] 
['C15', '150'] 

有没有办法,我只能解析型号。因为在结果中我也得到了400V,这不是型号。还有一个型号没有。在两个元素中被打破。

+0

是你输入例子只是一个文本? – RomanPerekhrest

+0

除非有一种方法可以区分可拒绝“400V”但拒绝“1165-1”的型号,然后否。 – martineau

+0

这个模型正是在' - >'之后出现的吗? – vitormm

回答

1

如果你不介意使用捕获组,模型数量始终在该行的第一场比赛,那么你可以做这样的事情:

for i in range (10): 
    modelnum = re.findall(r'^.*?(\w+\d+\w+)', productnames[i]) 
    print(modelnum) 
+0

我可以得到至少正确的型号吗?例如。第四个例子'C895-1'和第七个例子'LMP-452i'和第八个例子'C15/150'。 – muazfaiz

+0

我当然可以想出一个可以处理这个特定示例输入数据的模式,但是我怀疑这对您有多大用处。为了做到这一点,您需要能够指定有效型号的确切格式,或者您需要能够指定型号之前或之后的确切格式。由于我不知道这些规则中的哪一条会是什么,并且由于您没有提供这些规则,所以没有足够的信息来解决您的问题。 –

+0

它可以以任何数字或字符'^ \ w'开始,以'\ w'结尾,它可以像'[/ - ,.]'之间的特殊字符,你可以在上面的例子中看到它。现在我们可以忽略这些空格,因为这将包括整个字符串。感谢您提前帮助 – muazfaiz

相关问题