Регулярное выражение для тегов, но исключая атрибуты - PullRequest
0 голосов
/ 15 октября 2018

Я работаю в локализации видеоигр, и наш инструмент CAT использует Регулярные выражения для обнаружения тегов.Обычно они заключены в [], поэтому мы используем [(. *?)] Для их идентификации.Инструмент CAT затем импортирует его с форматом тега, что означает, что переводчики не могут редактировать / разбивать тег или удалять его без предупреждения.

Однако у нас есть проект, который содержит тег Gender с необходимыми нам атрибутамипереводить.Тег является следующим:

[Gender: "male", "female"]

Идея состоит в том, существует ли тег, который может идентифицировать весь сегмент как одну сущность, но оставляя мужчин и женщин вне.Мы использовали эти три (добавили несколько пробелов между запятыми и квадратными скобками, чтобы сделать \ видимым, извините, если это сбивает с толку):

\ [Gender\: \"

\"\ , \"

\"\ ]

Однако, это может создать проблемы с текстом, а также в предложениях, таких как: Они сказали«Нет, мы не делаем», «Мы хотим больше» и т. Д.

", " будет обнаружен как тэг без необходимости.

Есть ли способ иметь одну уникальную регулярнуювыражение, чтобы избежать этого?Если это так, будет ли возможно иметь один, если есть больше переводимых элементов или есть ли предел?I.e.: [Gender: "male", "female", "neutral"]

Заранее большое спасибо!

Обновление: для справки, я прикрепил настройки Regex.В нижней части вы видите, как программа использует их для создания тегов.Элементы красного цвета преобразуются в объекты вместо текста.Таким образом, переводчики не могут ни сломать тег, ни забыть добавить его. введите описание изображения здесь

1 Ответ

0 голосов
/ 16 октября 2018

Хорошо, основываясь на вашей картине, я думаю, что лучшим подходом было бы сделать несколько регулярных выражений.Поскольку, похоже, вы можете применять несколько правил

, одно из которых соответствует обычным тегам (обратите внимание, что оно соответствует только этим)

\[([^:\"])+\]

https://regex101.com/r/xFvsCe/3

Для сегментов снесколько переводимых элементов, нам нужно несколько вещей.

Сначала сопоставьте начало этих элементов

\[([^:\n]+: ?\")

https://regex101.com/r/q4Wgdu/2

Затем один, чтобы пометить запятые

(?<=[^\]])(\", ?\")

https://regex101.com/r/U9krdh/2

И, наконец, один, соответствующий концу сегментов

(?<=[^\]]*?)\"\]

https://regex101.com/r/FkgOOx/2

Возможно, вам придется изменитьсинтаксис в зависимости от того, какой тип регулярного выражения использует программа.Последние два регулярных выражения используют положительный lookbehind , который может иметь немного другой синтаксис.Или, возможно, даже не поддерживается.

Надеюсь, что это поможет

Редактировать: если правила применяются поверх eathother, это, вероятно, не будет работать, так как я предполагаю, что входной текст будет одинаковым при каждой подачек правилу.Но, может быть, это можно настроить в раскрывающемся списке фильтров?

...