从损坏的文本中查找和提取子字符串

时间:2017-03-30 19:02:54

标签: python

很容易在字符串中找到子字符串,如下所示:

substring: "060MHXEA"
string: "DVM MINI(RD040/050/060MHXGA, RD040/050/060MHXEA)"

但如果字符串被破坏,如下所示;

string: DV@@ M MIN@@ I ( R@@ D@@ 0@@ 40 / 0@@ 50 / 06@@ 0@@ M@@ H@@ X@@ GA , R@@ D@@ 0@@ 40 / 0@@ 50 / 06@@ 0@@ M@@ H@@ X@@ EA )

如何从字符串中查找并提取"06@@ 0@@ M@@ H@@ X@@ EA",因为它是060MHXEA的被破坏形式?

注意:在我的情况下,通过使用"@@ "分割字符来完成销毁。

1 个答案:

答案 0 :(得分:1)

警告!该解决方案可能不合理,请随时改进答案中的算法。

完整代码在此处:https://repl.it/Gn3N

使用格式[[character, 0]]生成我们的第一个列表(其中character - 来自初始字符串a的字符),然后用索引替换所有零(通过range(),这很重要) :

a = 'DV@@ M MIN@@ I ( R@@ D@@ 0@@ 40 / 0@@ 50 / 06@@ 0@@ M@@ H@@ X@@ GA , R@@ D@@ 0@@ 40 / 0@@ 50 / 06@@ 0@@ M@@ H@@ X@@ EA )'

positions = [[x, 0] for x in a]

for x in range(len(positions)):
    positions[x][1] = x

然后,我们将定义function-clearer,它替换positions中的substring-damager,同时保留它的初始索引:

def clearer(lst):
     trig = []
     for x in lst:
         if x[0] is '@':
             trig.append(x)
         elif x[0] is ' ' and x[1] == trig[-1][1]+1:
             trig.append(x)
     for x in trig:
         lst.remove(x)
     return lst

clr = clearer(positions)

现在,我们应该查找已清除文本中第一次出现子字符串的索引,使用初始索引生成范围并使用它迭代初始文本:

substr = '060MHXEA'

indexes = range(clr[''.join([x[0] for x in clr]).find(substr)][1], clr[''.join([x[0] for x in clr]).find(substr)+len(substr)][1])

result = ''

for x in indexes:
     result += a[x]
print(result) #06@@ 0@@ M@@ H@@ X@@ EA