0

从这个文件开始:

msgid "a string"
msgstr ""

msgid ""
"A longer string wraps "
"on multiple lines."
msgstr ""

Grep RegEx 替换所有msgstr行,如下所示:

msgid "a string"
msgstr "{a string}"

msgid ""
"A longer string wraps "
"on multiple lines."
msgstr ""
"{A longer string wraps "
"on multiple lines.}"

在我无限的天真中,我会寻找

\bmsgid "\b(*)\b"
msgstr "\b

...替换它

msgid "\1"
msgstr "{\1}"

但这并没有让我到任何地方。在网上搜索并尝试为 Java 或 C# 调整各种解决方案后,我放弃了,决定在这里问。

如果用于 .PO 翻译文件,您在上面看到的文件语法。

我为此使用了一个文本编辑器,Mac OS 上的 TextWrangler,它支持 Grep RegEx 语法。

谢谢你。

4

1 回答 1

1

那里有两种不同的模式。第一个模式msgid "a string"似乎表明后面的总数据msgid是单线模式。``msgid ""` 的第二种模式表示数据以多行形式出现。

因为它们是两种不同的模式,你会陷入困境,试图在一个正则表达式中匹配它们。(除非您使用 Perl 或除 RegEx 之外的某些程序逻辑的东西......)您说您想使用 Text Wrangler,所以我将我的评论限制在其中的工作原理上。

我认为您需要使用两个保存的模式执行两个查找/替换循环,以便在 Text Wrangler (TW) 中轻松执行此操作。在 TW 中,您可以(?sm)在模式的开头使用标志来使.*模式与行尾匹配。TW 会保存以前的 Grep 匹配项,因此一旦您获得了两个有效的查找/替换模式,就相当容易了。

因此,单行模式可以与msgid "([^"]*)"您拥有的模式匹配。第二个模式可以在 BB Edit 或 TW 中匹配(?sm)msgid ""[^"]*(.*)msgstr ""

您可能可以编写一个带有更改和命名捕获的正则表达式来匹配这两种模式并一次性替换,但是在 Perl 中快速编写一些东西会花费更少的时间......

于 2010-08-04T16:52:33.817 回答