Как с помощью регулярного выражения сопоставить (удалить) произвольную серию двухбуквенных кодов языков, разделенных запятыми, справа от заголовка? [дубликат]
У меня есть несколько строк, например:
Super Mario Bros. 8 (En,Fr,De,Es,It)
Donald Duck in Whacky Land (En,Fr,De,Es,Sv)
Toadstool Adventures 3D (En)
Chinaland (En,De)
A title which doesn't have any such thing
...
То есть название продукта, за которым следует (иногда) список из одного или нескольких языковых кодов в круглых скобках.
Мне очень трудно придумать регулярное выражение (PCRE), чтобы безопасно удалить их из строк безопасным способом. То есть вряд ли тронут заголовки.
Я знаю, что это ([A-Z]{1}[a-z]{1})должно быть где-то задействовано, чтобы соответствовать единственному языковому коду, например "It" или "De", но как я должен обрабатывать возможность любого количества таких в строке с запятыми между запятыми или без них (если это просто one), выходит за рамки моих навыков работы с регулярными выражениями.
Мне действительно жаль, что они не использовали какой-то однозначный разделитель между частью заголовка и частью «метаданные» имен файлов ... Тогда мне не нужно было бы выполнять все это ручное удаление методом проб и ошибок. Но они этого не сделали.
Ответы
Что-то вроде этого могло бы сделать это:
\([A-Z][a-z](?:,[A-Z][a-z])*\)$
https://regex101.com/r/xxNQ8h/1
Попробуйте вот так:
\(([A-Z][a-z],?)+\).*$
Онлайн-демонстрация