Регулярное выражение (сокращенно regexp или regexp) — это последовательность символов, образующих шаблон поиска в основном для использования при сопоставлении шаблонов со строками или при сопоставлении строк. Функциональные возможности аналогичны операциям «найти и заменить» с большей сложностью и специфичностью, или методам исключения определенного контента. Подробное описание регулярного выражения и таблицу используемых символов вы найдете в статье Википедии.
Чтобы использовать несколько регулярных выражений одновременно, вставьте символ |
между ними.
Регулярные выражения можно использовать в полях «фильтровать», «искать» и «заменить» в редакторе для компьютера CAT, в полях оригинала и перевода функции поиска контента, функции в настройках импорта файлов и для настройки правил сегментации.
Рекомендация
Чат-боты искусственного интеллекта (ИИ) могут быть очень эффективными в генерации и подтверждении регулярных выражений (regexp).
Используйте Инструменты типа Regex101 для проверки регулярных выражений с разными исходными данными.
ВАЖНО:
Phrase поддерживает Java regexp, но отклонит сложные стандартные выражения, чтобы защитить систему от перегрузок. Сложные регулярные выражения — это регулярные выражения с кванторами (кроме притяжательных) в группах, которые содержат другие кванторы (кроме притяжательных).
Примеры преобразования текста в теги при импорте файлов и использования regexp в редакторе для функций поиска и замены:
Пример |
Описание |
---|---|
<[^>]+> |
представляет <html_tag> |
\{[^\}]+\} |
представляет {variable}, |
\[[^\]]+\] |
представляет собой [variable], |
\[\[.+?\]\] |
представляет [[aa[11]bb]]. |
\$[^\$]+\$ |
представляет $operator_Name1$. |
\d+ |
представляет собой числа. Также, [0-9]+ |
[A-Za-z0-9] |
представляет собой любой буквенно-цифровой символ. |
.+\@.+\..+ |
адрес электронной почты — name@domain.com |
\d{4}[-]\d{2}[-]\d{2} |
дата 2018-08-01 |
\s$ |
пробел в конце сегмента |
^\s |
пробел в начале сегмента |
\s\s |
двойной пробел |
^\d |
цифра в начале сегмента |
\w+\s\s\w+ |
двойной пробел между словами |
\s\n |
новая строка, которой предшествует любой символ пробела |
\S\n |
новая строка, которой предшествует любой символ без пробелов |
<[^>]+>|\$[^=]+= |
преобразует переменные php и html-код ($svariable['name'] =) |
^\s*\'[^:]+: |
преобразует ключ поля Javascript с добавленными пробелами в начале строки ( 'ключ' :) |
\{\{[^\}]+\}\}|\'[^']+\' |
не переводит контент {{text here}} '{{text here}} и конвертирует его в теги |
\{\{[^\}]+\}\} |
представляет собой текст в {{}} скобках |
\([^\)]+\) |
представляет собой текст между () скобками |
\^[^\^]+\^ |
представляет собой текст между ^ отметками |
\@[^\@]+\@ |
представляет собой текст между @ отметками |
\^[^\^\?]+\? |
представляет собой текст в диапазоне от ^ до ? отметок |
\'[^']+\' |
представляет собой текст между ' ' апострофами |
\"[^"]+\" |
представляет собой текст между "" кавычек |
\%[^\%]+\% |
представляет собой текст в диапазоне от % символов |
\$\{[^}]*\} |
представляет собой текст в диапазоне от ${ до }, например: ${variable} |
$[a-zA-Z0-9\-_]+ |
представляет собой строку, которая начинается с $, например $appName |
(?<=\: ").*(?=") |
представляет собой текст внутри двойных кавычек после двоеточия и каталога, например, |
(?<=\: ').*(?=') |
представляет собой текст внутри одинарных кавычек после двоеточия и каталога, например, |
(?<=\=).*(?=) |
представляет собой текст после знака равенства и без каталога, например ключ=значение |
(.*)= |
представляет собой текст перед знаком равенства |
[^=]*$ |
представляет собой текст после знака равенства |
\/\/\S* |
представляет собой гиперссылки. Также, https:\/\/\S* |
</?mrk[^>]*> |
представляет собой открытые и закрытые теги HTML/XML |
\b[\p{Lu}]+\b |
представляет собой целые слова заглавными буквами |
Примечание
Поскольку файлы TXT в TMS обрабатываются построчно, некоторые стандартные выражения при работе в других средах могут функционировать не так, как ожидалось.
Примеры регулярных выражений при импорте определенного текста:
-
## ErrorMessage ##1## The number must be higher than 0. ##Z##
Чтобы импортировать текст между ##1## и ##Z## , используйте регулярное выражение:
(?<=##1## ).*(?= ##Z##)
-
'errorMessage' («Число должно быть выше 0.»)
Чтобы импортировать текст между ("и") , используйте регулярное выражение:
(?<=\(").*(?="\))
-
'errorMessage' = «Число должно быть выше 0».
Чтобы импортировать текст после знака = и между "и" , используйте регулярное выражение:
(?<=\= ').*(?=')
-
errorMessage = «это нужно перевести»
Чтобы импортировать текст после знака = и между "и" используйте регулярное выражение:
(?<=\= ").*(?=")
-
msgstr ("Число должно быть выше 0.")
Чтобы импортировать строки msgstr в одноязычных файлах PO, используя фильтр TXT, используйте регулярное выражение:
(?<=msgstr ").*(?=")
-
# Note: Это примечание
Чтобы исключить строки, начинающиеся с # , используйте регулярное выражение:
(^[^#].*)
-
значения '126', 'DCeT', 'Text (en)'
Чтобы импортировать текст только в кавычках и с (en), например текст (en)' используйте регулярное выражение:
(?<=')[^']*\(en\)(?=')
Пример структуры JSON:
{ "list": { "id": "1", "value": "text 1 for translation." }, "text": { "id": "2", "value": "text 2 for translation." }, "menu": { "id": "3", "value": "text 3 for translation." },"array": ["blue","green"],"arrays": [{ "color": "blue", "title": "BLUE" }, { "color": "green", "title": "GREEN" } ]}
-
для импорта каждого значения независимо от уровня используйте:
(^|.*/)value
-
для импорта только одного значения из списка используйте:
list/value
-
для импорта значения из списка и/или меню используйте | (ИЛИ)
list/value|menu/value
-
для импорта только первого экземпляра значения из меню используйте:
menu\[1\]/value
-
для импорта контента массива JSON после определенного ключа используйте:
(^|.*/)array\[.*\]
-
чтобы импортировать контент определенного массива объектов, используйте:
(^|.*/)arrays\[.*\].*
Пример файла YAML:
название: A text: translate A categories: название: B text: translate B categories: название: C text: translate C categories: content: название: D text: translate D
регулярное выражение для импорта:
-
только 'translate A' :
text
-
только 'translate C':
categories\[2\]/text
-
только 'translate D':
categories\[\d+\]/content[\1\]/text
-
весь текст:
text|categories\[\d+\]/text|categories\[\d+\]/content[\d+\]/text
Okapi, Java и Unicode используются для правил сегментации в файлах .SRX.
Использование regexp в файлах .SRX - задача сложная, и перед попыткой работы с ними рекомендуется иметь базовые знания об используемых регулярных выражениях.
Правила запрета разрыва (сокращения и т.д.) и правила разрыва (конец предложения с точкой и т.д.) находятся в файлах .SRX.
Пример |
Описание |
---|---|
[\p{C}] |
Невидимый управляющий символ. |
[\p{Z}] |
Пробел |
[\p{Lu}] |
Прописная буква, имеющая вариант нижнего регистра. |
[\p{N}] |
Любые цифровые символы. |
\Q ... \E |
Начало и конец цитаты - (\QApprox.\E). Используется для сокращений. |
\t |
Табулятор |
\n |
Новая строка |
\u2029 |
Разделитель абзацев |
\u200B |
Пробел нулевой ширины |
\u3002 |
Идеографическая точка |
\ufe52 |
Небольшая точка |
\uff0e |
Точка полной ширины |
\uff61 |
Идеографическая точка половинной ширины |
\ufe56 |
Небольшой вопросительный знак |
\uff1f |
Знак вопроса полной ширины |
\u203c |
Двойной восклицательный знак |
\u2048 |
Восклицательный знак вопроса |
\u2762 |
Усиленный восклицательный знак |
\u2763 |
Усиленный восклицательный знак с сердцем |
\ufe57 |
Небольшой восклицательный знак |
\uff01 |
Восклицательный знак полной ширины |
`[\u0080-\uFFFF]+` |
Символы из диапазона Unicode от \u0080 до \uFFFF |
`[\u00a8\u00b9\u00c4]+` |
Одно или несколько повторов указанных символов Юникода в квадратных скобках, например: \u00a8 + \u00b9 + \u00c4 |
Проверка контроля качества (QA) |
Исходное регулярное выражение |
Регулярное выражение перевода |
---|---|---|
Дополнительные цифры в переводе |
|
|
Порядок тегов (непарный, для сегментов с 3 тегами). Настроить regexp в соответствии с необходимым количеством тегов. |
|
|
Порядок тегов (парный, для сегментов с 3 тегами). Настроить regexp в соответствии с необходимым количеством тегов. |
|
|
Пробелы перед тегами |
|
|
Пробелы после тегов |
|
|
Нет пробела перед тегами |
|
|
Символы без пробелов после парных тегов |
|
|
Отсутствуют квадратные скобки |
|
|
Отсутствуют круглые скобки |
|
|