导入工具

正则表达式 (TMS)

文本由 Phrase Language AI 从英语机器翻译而得。

正则表达式(缩写为 regex 或 regex)是一系列字符,主要用于与 Strings 或字符串进行模式匹配的搜索模式。其功能类似于 查找和替换<1> 操作,但具有更高的复杂性和特异性,或者作为一种排除已定义内容的方法。有关正则表达式的详细描述和所使用字符的表格,请参阅 wikipedia 条目。

要同时使用多个正则表达式,请在它们之间插入一个管道字符 |

正则表达式可用于 CAT Editor 中的 筛选、搜索和替换字段搜索内容功能<2> 的原文/源语和译文字段,文件导入设置<4> 中的 转换为标记<3> 功能,以及用于自定义 断句规则<5>。转换器和 CAT Desktop Editor 使用 Java 正则表达式,而 CAT Web Editor 和 TMS 中的搜索使用 Lucene 正则表达式<7> 引擎。

提示

AI 聊天机器人可以非常有效地生成和验证正则表达式。

使用 Regex101 等工具来测试不同输入的正则表达式。

重要

Phrase 支持 Java 正则表达式,但会驳回复杂的正则表达式以保护系统免受过载影响。复杂的正则表达式是指那些在包含其他量词(占有优先量词除外)的组上使用量词(占有优先量词除外)的表达式。

常规示例

在导入文件时将文本转换为标记,以及在桌面编辑器中使用正则表达式进行筛选和查找与替换功能的示例:

示例

说明

<[^>]+>

represents <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 的字段键,并在行首添加空白字符 ( 'key' :)

\{\{[^\}]+\}\}|\'[^']+\'

不翻译 {{text here}} '{{text here}} 内容并将其转换为标记

\{\{[^\}]+\}\}

表示 {{}} 括号之间的文本

\([^\)]+\)

表示 () 括号之间的文本

\^[^\^]+\^

表示 ^ 标记之间的文本

\@[^\@]+\@

表示 @ 标记之间的文本

\^[^\^\?]+\?

表示 ^ 和 ? 标记之间的文本

\'[^']+\'

表示 ' ' 撇号之间的文本

\"[^"]+\"

表示 \"\" 引号之间的文本

\%[^\%]+\%

表示 % 符号之间的文本

\$\{[^}]*\}

表示 ${ 和 } 之间的文本,例如 ${variable}

\$[a-zA-Z0-9\-_]+

表示以 $ 开头的字符串,例如 $appName

(?<=\: ").*(?=")

表示冒号和空格后双引号内的文本,例如字符串 \"键\": \"字符串\" 中的 value

(?<=\\: ').*(?=')

表示冒号和空格后单引号内的文本,例如字符串 用户: 'JohnDoe' 中的 JohnDoe

(?<=\\=).*(?=)

表示等号后且无空格的文本,例如 键=字符串

(.*)=

表示等号前的文本

=(.*)

表示等号后的文本

\/\/\S*

表示超链接。此外,https:\\/\\/\\S*

</?mrk[^>]*>

表示 HTML/XML 开始和结束 mrk 标记,例如 <mrk id=\"abc\"> 和 </mrk>

TXT 导入

注释

由于 TMS 中的 TXT 文件是逐行处理的,因此在其他环境中有效的部分正则表达式可能无法按预期工作。

导入特定文本时正则表达式的示例:

  1. ## ErrorMessage ##1## 数字必须大于 0。 ##Z##

    若要导入 ##1####Z## 之间的文本,请使用正则表达式:(?<=##1## ).*(?= ##Z##)

  2. ErrorMessage (\"数字必须大于 0。\")

    若要导入 (\" 和 \") 之间的文本,请使用正则表达式:(?<=\\(\").*(?=\"\\))

  3. 'errorMessage' = '数字必须大于 0。'

    若要导入 = 符号之后以及 ' 和 ' 之间的文本,请使用正则表达式:(?<=\\= ').*(?=')

  4. errorMessage = \"此内容将被翻译\""

    若要导入 = 符号之后以及 'and' 之间的文本,请使用正则表达式:(?<=\\= \").*(?=\")

  5. msgstr (\"数字必须大于 0。\")

    若要使用 TXT 筛选导入单语 PO 文件中的 msgstr Strings,请使用正则表达式:(?<=msgstr \").*(?=\")

  6. # 注释:这是一个注释

    若要排除以 # 开头的行,请使用正则表达式:(^[^#].*)

  7. 值 '126', 'DCeT', 'Text (en)'

    若要仅导入引号内且带有 (en) 的文本(例如 Text (en)'),请使用正则表达式:(?<=')[^']*\\(en\\)(?=')

JSON 导入

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

  • 若要从列表和/或菜单导入值,请使用 | (OR) 运算符:list/value|menu/value

  • 若要仅导入菜单中值的第一个实例,请使用:menu\\[1\\]/value

  • 若要导入遵循特定键的 JSON 数组内容,请使用:(^|.*/)array\\[.*\\]

  • 若要导入特定对象数组的内容,请使用:(^|.*/)arrays\\[.*\\].*

YAML 导入

YAML 文件示例:

title: A
text: translate A
categories:
  title: B
  text: translate B
categories:
  title: C
  text: translate C
categories:
  content:
      title: D
      text: translate D

导入的正则表达式:

  • 'translate A'text

  • 'translate C'categories\\[2\\]/text

  • 'translate D'categories\\[\\d+\\]/content[\\1\\]/text

  • all text: text|categories\[\d+\]/text|categories\[\d+\]/content[\d+\]/text

断句规则

OkapiJavaUnicode 被用于 .SRX 文件中的断句规则。

在 .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]+`

方括号内出现一次或多次指定的Unicode字符,例如 \\u00a8 + \\u00b9 + \\u00c4

通用自定义 QA 检查

QA 检查

原文正则表达式

译文正则表达式

译文中额外的数字

\d 

\d 

标记顺序(不成对,适用于包含3个标记的段落)。

根据所需的标记数量调整正则表达式。

^.*\{1\}.*\{2\}.*\{3\}.*$

^.*\{1\}.*\{2\}.*\{3\}.*$

标记顺序(成对,适用于包含3个标记的段落)。

根据所需的标记数量调整正则表达式。

^.*\\{1\\>.*\\<1\\}.*\\{2\\>.*\\<2\\}.*\\{3\\>.*\\<3\\}.*$

^.*\\{1\\>.*\\<1\\}.*\\{2\\>.*\\<2\\}.*\\{3\\>.*\\<3\\}.*$

标记前的空间

\s(\{[1-9][0-9]*\}|\{[1-9][0-9]*>|<[1-9][0-9]*\}|\{[biu_\^]{1,4}>|<[biu_\^]{1,4}\})

\s(\{[1-9][0-9]*\}|\{[1-9][0-9]*>|<[1-9][0-9]*\}|\{[biu_\^]{1,4}>|<[biu_\^]{1,4}\})

标记后的空间

(\{[1-9][0-9]*\}|\{[1-9][0-9]*>|<[1-9][0-9]*\}|\{[biu_\^]{1,4}>|<[biu_\^]{1,4}\})\s

(\{[1-9][0-9]*\}|\{[1-9][0-9]*>|<[1-9][0-9]*\}|\{[biu_\^]{1,4}>|<[biu_\^]{1,4}\})\s

标记前无空间

\S(\{[1-9][0-9]*\}|\{[1-9][0-9]*>|<[1-9][0-9]*\}|\{[biu_\^]{1,4}>|<[biu_\^]{1,4}\})

\S(\{[1-9][0-9]*\}|\{[1-9][0-9]*>|<[1-9][0-9]*\}|\{[biu_\^]{1,4}>|<[biu_\^]{1,4}\})

成对标记后的非空白字符

((\{[1-9][0-9]*>)|(<[1-9][0-9]*\}))\S

((\{[1-9][0-9]*>)|(<[1-9][0-9]*\}))\S

缺少方括号

[^\[\]]*\[[^\[\]]*\][^\[\]]* 

[^\[\]]*\[[^\[\]]*\][^\[\]]* 

缺少圆括号

[^\(\)]*\([^\(\)]*\)[^\(\)]* 

[^\(\)]*\([^\(\)]*\)[^\(\)]* 

使用以下正则表达式检查相同数量的相同十进制数字,并使用适当的特定于语言的十进制分隔符。

(?<;n1>;\d+)\.(?<;n2>;\d+)

(?<;n1>;\d+),(?<;n2>;\d+)

这篇文章有帮助吗?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.