簡體   English   中英

用於.PO文件的Grep,或用於分隔符之間的文本塊的RegEx

[英]Grep for .PO file, or RegEx for a block of text between delimiters

從此文件開始:

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語法。

謝謝。

那里有兩種不同的模式。 msgid "a string"的第一個模式msgid "a string"似乎表明msgid的總數據是一個單行模式。 第二個模式``msgid“”`表示數據遵循多行。

由於它們是兩種不同的模式,因此您將陷入困境,試圖在一個正則表達式中將它們全部匹配。 (除非您使用Perl或除RegEx之外還帶有某些程序邏輯的東西...)您說過您想使用Text Wrangler,所以我將在此范圍內限制我的評論。

我認為您將需要使用兩個保存的模式執行兩個查找/替換循環,以在Text Wrangler(TW)中輕松實現此目的。 在TW中,您可以在模式的開頭使用(?sm)標志,以使.*模式與行尾匹配。 TW保存了以前的Grep匹配,因此一旦找到兩個有效的查找/替換模式,這將非常容易。

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

您可能會編寫帶有更改和命名捕獲的正則表達式來匹配兩種模式並一次性替換,但是用Perl快速編寫某些東西會花費更少的時間...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM