Как исключить строки где встречается DLC между версией и годом? (Регулярные выражения)

Между версией и годом может быть абсолютно что угодно, или же может вообще ничего не быть, и неизвестно где там встретится слово DLC поэтому я использовал .* но из за этого, строки в которых встречается слово DLC не исключились...

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Вы можете использовать

(\d+(?:\.\d+)*)(?:(?!DLC).)*?\((\d{4})\)(?:\s*PC)?

См. пример работы регулярного выражения. Тут .* заменено конструкцией (?:(?!DLC).)*, т.е. так называемой "ограниченной точкой" (англ. "tempered dot", "tempered greedy token"). .* находит ноль и более (как можно больше) любых символов, отличных от символов перевода строки, тогда как (?:(?!DLC).)*? находит ноль и более повторов любого символа, отличного от символов перевода строки, как можно меньшее количество раз, который не является начальным символов подстроки DLC.

Подробности

  • (\d+(?:\.\d+)*) - Подмаска №1: одна и более цифр, а затем ноль и более повторов точки + одной и более цифр
  • (?:(?!DLC).)*? - любой текст, до первого вхождения DLC
  • \( - символ (
  • (\d{4}) - Подмаска №2: четыре цифры
  • \) - символ )
  • (?:\s*PC)? - опциональная последовательность ноля и более пробельных символов, а затем PC.
→ Ссылка