导入工具

正则表达式 (TMS)

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

正则表达式(缩写为 regex 或 regexp)是一系列字符,主要用于与 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

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

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

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

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

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

表示等号后且无空格的文本,例如 key=value

(.*)=

表示等号前的文本

=(.*)

表示等号后的文本

\/\/\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 文件中的 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.