导入工具

正则表达式 (TMS)

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

正则表达式(缩写为 regex 或 regex)是一个字符序列,形成一个搜索模式,主要用于与字符串或字符串匹配的模式匹配。其功能类似于 查找和替换 操作,但更复杂和具体,或作为排除定义内容的方法。有关正则表达式的详细说明和使用字符的表格,请参见 wikipedia 条目。

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

正则表达式可以在 CAT 编辑器中的 筛选、搜索和替换字段搜索内容功能 的源和目标字段、转换为标签 功能的 文件导入设置 中以及用于自定义 断句规则。转换器和 CAT 桌面编辑器使用 Java 正则表达式,而 CAT Web 编辑器和 TMS 中的搜索使用 Lucene 正则表达式 引擎。

提示

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 在字符串 "key": "value"

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

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

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

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

(.*)=

表示等号前的文本

=(.*)

表示等号后的文本

\/\/\S*

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

</?mrk[^>]*>

表示 HTML/XML 开放和关闭 mrk 标签,例如 <mrk id="abc"> 和 </mrk>

TXT 导入

注释

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

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

  1. ## 错误信息 ##1## 数字必须大于 0。 ##Z##

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

  2. 错误信息 ("数字必须大于 0。")

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

  3. '错误信息' = '数字必须大于 0。'

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

  4. 错误信息 = "这是要翻译的内容"

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

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

    要使用 TXT 筛选器在单语 PO 文件中导入 msgstr 字符串,请使用正则表达式:(?<=msgstr ").*(?=")

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

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

  7. 值 '126', 'DCeT', '文本 (en)'

    要仅导入带有 (en) 的引号中的文本,例如文本 (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

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

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

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

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

YAML 导入

YAML 文件示例:

标题:A
文本:翻译 A
类别:
  标题:B
  文本:翻译 B
类别:
  标题:C
  文本:翻译 C
类别:
  内容:
      标题: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.