如果 QA 工具运用得当,可将翻译中的低错降至最低程度。而正则表达式则是 QA 工具中的利器。现在就通过一个数字验证实例说明如何巧用正则表达式提高工作效率。
根据翻译风格指南,一天中的时刻如果是 12 小时制,则翻译须遵循以下规则:
```
12:00 a.m. -> 午夜 12:00
12:59 a.m. -> 午夜 12:59
1:00 a.m. -> 午夜 1:00
5:59 a.m. -> 午夜 5:59
6:00 a.m. -> 早上 6:00
8:59 a.m. -> 早上 8:59
9:00 a.m. -> 上午 9:00
11:59 a.m. -> 上午 11:59
12:00 p.m. -> 中午 12:00
12:59 p.m. -> 中午 12:59
1:00 p.m. -> 下午 1:00
6:59 p.m. -> 下午 6:59
7:00 p.m. -> 晚上 7:00
11:59 p.m. -> 晚上 11:59
```
其中小时和分钟之间的分隔符可能是单字节冒号或句号,am 可能有各种变体,如 a.m./a.m/am./AM/A.M/AM./aM/Am/aM./A.m...。pm 也是一样。
由于不同时刻,am/pm 需要翻译成不同译文,因此批量替换是不可能的。
如何验证最终译文完全遵循了风格指南呢?答案是正则验证。这么复杂的要求,只有编写一系列正则表达式,才能保证万无一失。
按照风格指南,编写的正则验证规则如下:
```
12(\.|:)(\d{1,2}) ?p(\.)?m(\.)? 中午 12:$2 GroupedSourceNotTarget
12(\.|:)(\d{1,2}) ?a(\.)?m(\.)? 午夜 12:$2 GroupedSourceNotTarget
\b(0?[1-5]{1})(\.|:)(\d{1,2}) ?a(\.)?m(\.)? 午夜 $1:$3 GroupedSourceNotTarget
\b(0?[6-8]{1})(\.|:)(\d{1,2}) ?a(\.)?m(\.)? 早上 $1:$3 GroupedSourceNotTarget
\b(0?(9|10|11){1})(\.|:)(\d{1,2}) ?a(\.)?m(\.)? 上午 $1:$4 GroupedSourceNotTarget
\b(0?[1-6]{1})(\.|:)(\d{1,2}) ?p(\.)?m(\.)? 下午 $1:$3 GroupedSourceNotTarget
\b((0?[7-9]{1})|((10|11){1}))(\.|:)(\d{1,2}) ?p(\.)?m(\.)? 晚上 $1:$6 GroupedSourceNotTarget
```