Используйте это regex
для распознавания шаблона.Может быть, это может помочь:
import re
str_test = 'This is a sample text NRC234456789 and this is another case AZN.1.2.3.4.5.6.7.8.9 and this another case BSA 123 456 789 and final case SSR/789456123'
regex = re.findall("([A-Z0-9.\s\/]{2,})",str_test)
result = []
Одно решение, если нецифровые символы только точка, запятая и косая черта:
for r in regex:
result.append(r.replace(".","").replace(" ","").replace("/",""))
print (result)
Или используйте этот цикл, если нецифровый символ может быть любым:
for r in regex:
result.append(re.sub("([^\d\w])","",r))
print (result)
Вывод:
['NRC234456789', 'AZN123456789', 'BSA123456789', 'SSR789456123']
ОБНОВЛЕНИЕ
import re
str_test = 'This is a sample text NRC234456789 and this is another case AZN.1.Z.3.4.S.6.7.8.9 and this another case BSA 123 456 789 and final case SSR/789456123'
regex = re.findall("([A-Z]{3})([A-Z0-9.\s\/]{2,})",str_test)
result = []
for r in regex:
result.append(r[0]+("".join(re.sub("([^\d\w])","",str(r[1])).replace("Z","2").replace("S","5"))))
print (result)
Вывод:
['NRC234456789', 'AZN123456789', 'BSA123456789', 'SSR789456123']