很容易在字符串中找到子字符串,如下所示:
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
的被破坏形式?
注意:在我的情况下,通过使用"@@ "
分割字符来完成销毁。
答案 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