Query to filter out the duplicate and pick the latest
The query below will probably work; the subquery extracts the highest number after the - ('Version') and the outer query concatenates them back into the original format.

SELECT CASE Version IS NULL
           WHEN 1 THEN ID
           ELSE CONCAT(ID, '-', Version)
           END
  FROM
(SELECT
  CASE LOCATE('-', name)
           WHEN 0 THEN name
           ELSE SUBSTRING(name, 1, LOCATE('-', name) - 1)
           END AS 'ID',
  MAX(CASE LOCATE('-', name)
           WHEN 0 THEN NULL
           ELSE SUBSTRING(name, LOCATE('-', name) + 1)
           END) AS 'Version'
  FROM forms
    GROUP BY CASE LOCATE('-', name)
           WHEN 0 THEN name
           ELSE SUBSTRING(name, 1, LOCATE('-', name) - 1)
           END) AS subquery


Here is an online demo.