Как с помощью регулярного выражения сопоставить (удалить) произвольную серию двухбуквенных кодов языков, разделенных запятыми, справа от заголовка? [дубликат]

Dec 01 2020

У меня есть несколько строк, например:

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), выходит за рамки моих навыков работы с регулярными выражениями.

Мне действительно жаль, что они не использовали какой-то однозначный разделитель между частью заголовка и частью «метаданные» имен файлов ... Тогда мне не нужно было бы выполнять все это ручное удаление методом проб и ошибок. Но они этого не сделали.

Ответы

MonkeyZeus Dec 01 2020 at 02:29

Что-то вроде этого могло бы сделать это:

\([A-Z][a-z](?:,[A-Z][a-z])*\)$

https://regex101.com/r/xxNQ8h/1

wp78de Dec 01 2020 at 02:33

Попробуйте вот так:

\(([A-Z][a-z],?)+\).*$

Онлайн-демонстрация