If there really are always four elements, then you could use PARSENAME (look it up in BOL):
;WITH SampleData AS (
SELECT MyString = 'Scrap : Part Assembly : Surface Defects : Scratch' UNION ALL
SELECT 'Scrap : Part Assembly : Components : Wrong Components' UNION ALL
SELECT 'Scrap : Part Assembly : Other : Change Over' UNION ALL
SELECT 'Repair : Punching : Surface Damages : Crack')
SELECT
MyString,
Element1 = PARSENAME(REPLACE(MyString,' : ','.'),4),
Element2 = PARSENAME(REPLACE(MyString,' : ','.'),3),
Element3 = PARSENAME(REPLACE(MyString,' : ','.'),2),
Element4 = PARSENAME(REPLACE(MyString,' : ','.'),1)
FROM SampleData
For fast, accurate and documented assistance in answering your questions, please read this article.
Understanding and using APPLY, (I) and (II) Paul White
Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden