Не совсем уверен, что вы имели в виду для проблемы в большом файле, и я полагаю, что два показанных вами регулярных выражения работают противоположно тому, что вы сказали: первый должен дать вам имя, а второй - версию.
В любом случае, вот предположение, которое я должен догадаться, что может иметь для вас смысл:
- «Имя» может следовать за
-
или _
, за которым следует строка версии.
- Строка «Version» - это то, что предшествует
-
или _
, с некоторой цифрой, затем точкой или подчеркиванием, затем цифрой и затем любой строкой.
Если эти предположения имеют смысл, вы можете использовать
^(.+?)(?:[-_](\d+[._]\d+.*))?$
в качестве вашего регулярного выражения. Группа 1 будет именем, Группа 2 будет версией.
Демонстрация в regex101: https://regex101.com/r/RnwMaw/3
Объяснение регулярного выражения
^ start of line
(.+?) "Name" part, using reluctant match of
at least 1 character
(?: )? Optional group of "Version String", which
consists of:
[-_] - or _
( ) Followed by the "Version" , which is
\d+ at least 1 digit,
[._] then 1 dot or underscore,
\d+ then at least 1 digit,
.* then any string
$ end of line